joyrus 发表于 2012-6-17 18:09:25

我的第一个单片机开源项目——有刷直流电动机PWM调速器的单片机程序

本帖最后由 joyrus 于 2012-6-21 11:58 编辑

开源项目名称:有刷直流电动机PWM调速器的单片机程序

设计目的:实现捕捉接收机输出的周期为20ms的脉冲,脉冲宽度从1ms-2ms(1.5ms+/-0.5ms)变化的信号,也就是油门从0%-100%的变化,转换为PWM控制信号,用以控制MOSFET管实现有刷直流电动机的转速控制(0转速-最高转速)。

设计要求:这是一个比较简单的项目,可用于遥控模型直升机,飞机等单向调速的场合,其需要至少1个(I/O)信号输入引脚用于检测接收机的脉宽信号,另1个(I/O)引脚用于输出PWM驱动信号。实际应用时还需要考虑到如果使用电池驱动电动机,需要增加1个(I/O)引脚对电池的电压进行检测,并在要求的低电压出现后进行相应处理。要求更高的话还需要对输出电流进行检测以提供电流过载保护功能等。我的这个设计仅包含将输入脉宽信号转换为PWM驱动信号,其他功能以后再和大家一起讨论。

单片机的选择:为了可以用于对重量和体积要求较高的模型直升机和飞机,可以选择最小引脚只有8个的PIC单片机,或者其他品牌单片机。为了在这种小体积低端的单片机上也能实现本项目的要求。所以我没有使用中端单片机所具有的优越功能,比如中断,比如CCP,捕捉/比较/PWM功能,并且只使用1个所有单片机都有的TMR0时钟计数器。也就是说对于输入脉冲的采样完全是用软件实现的,并且PWM调速脉冲输出也完全是用软件实现的!

实验平台:PIC16F877A单片机开发板+PICKit3开发调试器也可以说是仿真器。由于PIC12F508使用PICKit3调试时需要另外购买仿真头,价格比较贵,所以使用大众化的普及度及其高的PIC16F877A来完成设计。除了在几个寄存器的名称上有不同外,可以很轻松的移植到PIC12F508系列上,在做产品时就可以使用价格低廉的PIC12C508/OTP型单片机。

这是本人使用的平台在淘宝有售,本人也是在淘宝购买的,有兴趣的朋友可以去了解一下:

1. 国产PICKit3仿真调制器,价格非常实惠!这是我在淘宝上找到的最便宜的价格了!我现在的就是国产的,买的时候比这个价格还贵一点,功能和原厂的完全一样!
2. Microchip原装PICKit3仿真调制器,也是比较便宜的价格!有原厂情节的可以买原厂的。
3. 这个PIC16F877A开发板比我的要好很多,有配箱子和编程器,价格才200出头有需要的朋友可以考虑!
4. 这家的PIC16F877A的开发实验板也不错,价格更低,配置也很多的!

大家注意开发板要和仿真调试器一起配合使用才能真正的在线调试程序。

测试平台:舵机测试器100%实现接收机的标准信号,示波器测量PWM输出波形。本项目只要输出相应的PWM波形即可确定是否设计成功。

joyrus 发表于 2012-6-17 21:21:12

本帖最后由 joyrus 于 2012-6-19 18:34 编辑

设计思路:为了可以在任何单片机上运行本设计,本设计不使用任何的硬件捕捉/采样/PWM等功能,也没有使用中断功能,全部功能采样,转换,输出由软件完成。

为了捕捉输入的脉宽信号,和输出PWM调速驱动脉冲,程序需要完成采样>;PWM脉宽计算>输出PWM调制脉宽的过程,并重复循环执行。

一、采样过程:读输入引脚电平,如果读到高电平则说明有脉冲输入,将TMR0计数器的数值记录保存。如果读到的是低电平,则也将TMR0计数器的数值保存下来,把两次的数值相减就得到了输入脉冲的宽度,由于输入脉冲的宽度为1ms-2ms(实际两端都会有放宽),脉冲宽度最大越为2ms也就是2000us。TMR0为8位计数器256个指令周期后就会溢出复位,如果使用4MHz晶振每个指令周期为1us。要保证TMR0最大计数周期大于输入信号的最大脉冲宽度,就需要对TMR0进行预设分频,考虑到实际很可能最大脉宽超过2.1ms就是需要2100us,2100/256已经超过了8,所以需要使用16分频得到256x16=4096us。这样在输入脉冲的1ms的变化过程中将得到76个计数值(用itp来代表),这对于分辨率要求不是非常高的电动机调速场合已经可以满足设计要求了。

二、PWM脉宽计算过程:在得到输入脉冲的计数值之后可以通过计算得到输出PWM的对应脉宽,由于也是使用TMR0来得到PWM的脉冲宽度和脉冲周期,所以受到TMR0的分频限制,PWM的输出脉冲周期也已经被限制在一定的范围内了。首先PWM的周期一样不能大于TMR0的计数周期也就是不能超过4096us=4.096ms,这样最小的PWM脉冲频率为不低于250Hz,我就确定使用这个周期4ms/250Hz作为PWM的输出频率。TMR0每250个计数为4ms的时间(250x16),只要在TMR0计数满250后就是PWM输出为低电平,这样就可以使PWM输出脉冲的频率稳定在250Hz了。而PWM输出的脉冲宽度值(用otp来代表)就由采样得到的计数值(itp)通过计数得到,然后还是通过TMR0的计数值来确定输出高电平的间也就是PWM的脉冲宽度了。

由于otp最大为250,而itp为76,250/76是除不尽的,我选用的单片机是没有指令直接处理带小数的数值,即使能够处理小数,也没有硬件乘法器和相应的指令,就要用加法指令来累加,这样每一个数值需要不同数量的加法指令来完成计算,最多时需要至少75条加法指令,这将使影响到单片机对输入信号的采样率出现较大的不稳定,而导致采样准确率降低。有一个好办法可以解决这个问题,就是使用查表的方法,预先计算好76个对应值,只有用itp的值作为地址偏移量通过几条指令就可以直接得到要得otp值,即使考虑过滤所有非法的脉宽输入信号也最多是256个对应值(占用256个字节的程序空间),如果程序空间紧张,可以通过判断来过滤非法脉宽输入。

三、输出PWM调制脉宽:有了otp就知道PWM调制脉宽的需要宽度是多少个TMR0计数值了,这就简单了。只有在得到otp值之后立即记录TMR0的的实时值(用otm代表),再将其值加上otp的数值(几乎同时把没有加过otp值的otm加上250用otpwm代表,这是用来稳定PWM输出频率的)。然后使PWM输出I/O引脚输出高电平,再之后就是检测otm减去TMR0的的实时值,如果相减是小于0则说明输出的脉冲宽度已经超时,立即使PWM输出I/O引脚输出低电平,随后无论如何都要立即再用otpwm减去TMR0的实时值,如果小于0则说明已经到达PWM调制额定频率(4ms),立即使PWM输出I/O引脚输出低电平,这样就稳定了PWM输出调制脉宽的频率,完成了一个完整的PWM调制脉冲信号。有的朋友也许会问,为什么不判断两个数字相当,这样不是更精确吗?实际上以上的这些指令是在这上面整个三个步骤中不断循环执行的,由于在一次判断之后要再经历整个程序几乎重走一遍的时间,不可能在1个计数值(16us)内执行完一次程序,就很可能错过两者相等的值,根据程序的优化在3-5个计数值也就是48us-80us内程序执行完一次的话在250个计数值(4000us的周期)内也就是1%-5%的误差,对输出没有什么影响。如果要求高一点,可以在所有程序写完之后,仔细整理并计算指令周期数来校准这个PWM输出的误差。但是对输入信号的采样误差是没有办法用软件解决的,只有提高采样率来降低输入信号采样的误差,而用软件提高采样率的办法就是在2次采样之间间隔的时间越短越好,和输出一样也是整个程序走完一次完成一次采样,换句话说也就是整个程序指令越少越好。如果要解决这个问题的话就要使用中断功能,这样编写的程序无法在没有中断功能的单片机上运行。

由于本人也是刚刚系统地开始学习单片机的开发,所有不免有很多的错误,甚至在设计思路就不可避免的走弯路,还请各位朋友海涵!

下面给出测定的舵机测试器输出的接收机脉宽信号和单片机程序输出的PWM调制波形的视频:

首先是舵机测试器的输出信号:

http://player.youku.com/player.php/sid/XNDE1OTkyNTc2/v.swf

接下来是PIC单片机通过纯软件的方式输出的PWM调制调速波形:

http://player.youku.com/player.php/sid/XNDE1OTk1Mjc2/v.swf

joyrus 发表于 2012-6-19 12:22:05

本帖最后由 joyrus 于 2012-6-19 12:57 编辑

所有程序内容:

;**************************************************
;程序功能说明
;本程序通过对PROTD0引脚的输入脉宽信号(周期20ms,脉宽变化1.5ms+/-0.5ms)
;进行转换为PWM调制脉宽信号(周期250us,脉宽变化约为0%-100%)
;由PORTD1输出,可用与驱动直流电动机的匀速调速
;本程序有很大的优化空间和存在安全漏洞,这个程序只是本人的学习过程,和大家共同探讨的载体
;本人联系方法:沈毅;joyrus@163.net,www.joyrus.com,QQ:15953321
;**************************************************

#include <p16f877A.inc>;使用PIC16F877A单片机

;根据需要在这里配置单片机,也可以在MPLAB IDE中配置
;__CONFIG

;定义变量寄存器
;**************************************************
itp      equ 0x20;输入脉冲宽度
otp    equ 0x21 ;输出PMW脉冲宽度

itm1   equ 0x22 ;输入脉冲高电平TMR0起始记数
itm0   equ 0x23 ;输入脉冲高电平TMR0结尾记数

itmf   equ 0x24 ;itmf,
                ;itmf.0输入脉冲低电平标志位
                ;itmf.1输入脉冲高电平标志位,实际上次位可以不用,而只用itmf.0这一位即可
                ;即减少的指令数量,又避免了这两位由于意外同时为1而造成程序的错误,类似
                ;情况在本程序中还有其他地方会出现可以优化省略的变量和代码,就不一一指出了
                ;itmf.2输出PWM脉冲周期溢出标志位

otm    equ 0x25                ; PWM脉冲高电平输出TMR0起始记数
otpwmequ 0x26            ; PWM脉冲周期+TMR0
pwm_tmr0_otp equ 0x27   ;保存TMR0计数值的初值用于计算PWM脉冲宽度与周期

;定义常量
;**************************************************            
pwm_cycle equ 0xFA    ; PWM周期数250个计数周期共4ms
      
;程序起始
;****************************************************
       org   000h      ;定义程序存放区域的起始地址
       nop               ;放置一条ICD必须的空操用指令

;Bank1 初始化配置
;*******************************************************
   
       banksel OPTION_REG      ;选择Bank1
       movlw   b'10000011'       ;TMR0配置数
       movwf   OPTION_REG      ;TMR0配置寄存器
       ;movlw   0x00             ;中断配置数,禁止所有中断,可省略
       ;movwf   INTCON         ;中断配置寄存器,可省略
       ;bcf   TRISE,PSPMODE    ;设定PORTD为普通数字I/O,可省略
       bcf   TRISD,1         ;设定PORTD1为输出,PORTD其他口全为输入



;Bank0 初始化变量
;*******************************************************      
       bankselitmf          ;选择Bank0初始化变量
       ;*********************************************
       movlw    b'00000001'   ;初始化itmf,假设已经处理过输入脉冲的低电平
       movwf    itmf          ;初始化itmf
       ;*********************************************
       ;movlw    0x00
       ;movwf    itm0         
       ;movwf    itm1         
       ;movwf    itp         
       ;movwf    otp
       ;movwf    otm
       ;movwf    otpwm
       ;...............
       ;建议对所有的变量寄存器进行初始化

;Bank0 主程序入口
;*************************************************************
Main_esc                           ;如有需要可以在这里进行电池电压的检查
                                          ;根据检查结果选择需要执行的程序段
                                          ;另外在程序的相应位置还应该插入对首次
                                          ;上电后的高油门位置的输出保护代码
                                          ;以防止一上电后电动机即可启动的危险!            
      

;开始捕捉处理输入脉冲的高电平
;*************************************************************
Process_higebtfsc itmf,1         ;检查itmf1标志位,为0则执行本段代码
                  gotoProcess_low      ;如果itmf1为1说明已经处理过本代码,跳转处理低电平
                  btfss   PORTD,0      ;如果PORTD0输入是低电平则不执行本段代码
                  goto    Process_low    ;跳转处理低电平
                  movfTMR0,w         ;从TMR0读入高电平计数初始数
                  movwf itm1             ;初始数存入itm1
                  bsf   itmf,1         ;设置itmf1为1说明已经处理了高电平,不再处理
                  bcf   itmf,0         ;设置itml0为0说明需要处理低电平
      

;开始捕捉处理输入脉冲的低电平,说明高电平已经结束,完成检测输入脉冲的宽度
;**********************************************************
Process_low   btfsc itmf,0         ;检查itmf0标志位,为0则执行本段代码
                  goto Count_itp         ;如果itmf0为1说明已经处理过本代码,跳转计算输入脉冲宽度
                  btfsc PORTD,0          ;如果PORTD0输入是高电平则不处理本代码
                  goto Count_itp         ;跳转处理计算输入脉冲宽度
                  movfTMR0,w         ;从TMR0读入高电平计数结尾数
                  movwf itm0             ;结尾数存入itm0
                  bsf   itmf,0         ;设置itmf0为1说明已经处理了低电平,不再处理
                  bcf   itmf,1         ;设置itmf1为0说明需要处理高电平


;开始计算输入脉冲宽度
;*********************************************************
Count_itp   btfss itmf,0          ;检查itmf0标志位,为1则计算输入脉冲宽度,说明低电平已经出现
                   goto Output_pwm       ;跳转计算PWM输出脉冲
                   movf itm1,w         ;itm0-itm1
                  subwf itm0,w          ;itm0-itm1
                  movwf itp             ;itp=itm0-itm1为输入脉冲宽度

;得到itp后开始输出PWM的过程
;********************************************************
Output_pwm   call Count_pwm         ;通过itp查表得到otp脉冲宽度值由w寄存器带出
                     movwf otp                ;w->otp
      
             ;如果查表结果为0%输出则关闭PWM中断输出,恒定输出低电平
             ;***********************************************
             movfotp,w
             btfsc STATUS,Z
             gotoInt_pwm
             ;如果查表结果为100%输出则PWM直接输出恒定高电平
             ;***********************************************
             sublw pwm_cycle
             btfsc STATUS,Z
             goto Pwm_full                  
             ;*******************************************************
      
             ;保存进入PWM计数前的TMR0计数值的初值
             ;在每一个PWM周期内只处理和计算一次
             ;*****************************************   
             btfss   itmf,2         ;检查PWM周期是否溢出标志位,为1则溢出
             goto    Figure_pwm       ;没有溢出不需要重新计算PWM的脉宽和周期,直接输出PWM
             movfTMR0,w            
             movwf pwm_tmr0_otp
            ;*****************************************
      
      
            ;初始化otp和otpwm,以便于和TMR0进行比较计算PWM脉冲宽度
            ;*******************************************************
             movfpwm_tmr0_otp,w   ;从TMR0->w读入PWM脉冲输出高电平计数起始数
             addwf otp,w            ;w+otp->w得到PWM脉冲输出宽度比较数
             movwf otm                ;w->otm保存比较数到otm
            ;初始化otp和otpwm,以便于和TMR0进行比较计算PWM脉冲周期
            ;************************************************************                     
             movfpwm_tmr0_otp,w   ;计算otpwm脉冲周期溢出计数
             addlw pwm_cycle          ;加PWM脉冲周期到初始计数值
             movwf otpwm            ;得到PWM脉冲周期溢出计数放入otpwm
            ;***********************************************************               

;计算PWM的脉宽和周期过程
;*****************************************************************
Figure_pwm   movfTMR0,w             ;采集实时计数脉冲
                  subwf otm,w            ;otm-TMR0比较计算PWM脉冲宽度
                  btfss STATUS,C         ;比较计算PWM脉冲宽度         
                  goto Pwm_low             ;otm<TMR0则PWM脉宽到达otm指定宽度PWM输出低电平
                  goto Pwm_high            ;otm>TMR0则PWM脉宽未到达otm指定宽度PWM输出高电平
      
Pwm_low      bcf   PORTD,1            ; PWM输出低电平
                  gotoCheck_pwm_out      ;goto检查PWM周期是否溢出

Pwm_high   bsf   PORTD,1            ; PWM输出高电平
      
Check_pwm_out   movfTMR0,w             ;采集实时计数脉冲
                        subwf otpwm,w                ;比较计算otpwm脉冲周期是否溢出
                        btfss STATUS,C               ;检查PWM周期是否溢出
                        gotounPwm_out             ;otpwm>TMR0则PWM周期未到达otpwm指定宽度
                        bsf   itmf,2                      ; PWM周期已经溢出设置标志位为1
                        gotoInt_pwm               ;otpwm<TMR0则PWM周期到达otpwm指定宽度中断PWM输出脉冲

unPwm_out    bcf   itmf,2             ; PWM周期没有溢出设置标志位为0
                  goto Main_esc         ;返回主程序入口

Int_pwm      bcf   PORTD,1            ;终止输出,PWM输出低电平
                  goto Main_esc            ;返回主程序入口

Pwm_full   bsf   PORTD,1            ; PWM输出高电平
               goto Main_esc            ;返回主程序入口



;查表pwm脉冲宽度 子程序
;******************************************************************
Count_pwm
       movlwhigh(Table_pwm) ;查表代码
       movwfPCLATH
       movf   itp,w
       addlwlow(Table_pwm)
      
       btfscSTATUS,C
       incf   PCLATH,f
       movwfPCL
      
Table_pwm
      retlw      0x00      ;0               
      retlw      0x00      ;1               
      retlw      0x00      ;2               
      retlw      0x00      ;3               
      retlw      0x00      ;4               
      retlw      0x00      ;5               
      retlw      0x00      ;6               
      retlw      0x00      ;7               
      retlw      0x00      ;8               
      retlw      0x00      ;9               
      retlw      0x00      ;10               
      retlw      0x00      ;11               
      retlw      0x00      ;12               
      retlw      0x00      ;13               
      retlw      0x00      ;14               
      retlw      0x00      ;15               
      retlw      0x00      ;16               
      retlw      0x00      ;17               
      retlw      0x00      ;18               
      retlw      0x00      ;19               
      retlw      0x00      ;20               
      retlw      0x00      ;21               
      retlw      0x00      ;22               
      retlw      0x00      ;23               
      retlw      0x00      ;24               
      retlw      0x00      ;25               
      retlw      0x00      ;26               
      retlw      0x00      ;27               
      retlw      0x00      ;28               
      retlw      0x00      ;29               
      retlw      0x00      ;30               
      retlw      0x00      ;31      
      retlw      0x00      ;32               
      retlw      0x00      ;33               
      retlw      0x00      ;34               
      retlw      0x00      ;35               
      retlw      0x00      ;36               
      retlw      0x00      ;37               
      retlw      0x00      ;38               
      retlw      0x00      ;39               
      retlw      0x00      ;40               
      retlw      0x00      ;41               
      retlw      0x00      ;42               
      retlw      0x00      ;43               
      retlw      0x00      ;44               
      retlw      0x00      ;45               
      retlw      0x00      ;46               
      retlw      0x00      ;47               
      retlw      0x00      ;48               
      retlw      0x00      ;49               
      retlw      0x00      ;50               
      retlw      0x00      ;51               
      retlw      0x00      ;52               
      retlw      0x00      ;53                itp可能出现的值其他值为非法值,一律返回0
      retlw      0x00      ;54                ;*********************
      retlw      0x00      ;55            ;0x37      
      retlw      0x00      ;56            ;0x38      
      retlw      0x00      ;57         ;0x39      
      retlw      0x00      ;58         ;0x3A      
      retlw      0x00      ;59         ;0x3B      
      retlw      0x00      ;60         ;0x3C      输入脉宽有效范围取值
      retlw      0x00      ;61         ;0x3D      ************************
      retlw      0x00      ;62         ;0x3E      0%
      retlw      0x04      ;63         ;0x3F      1
      retlw      0x08      ;64         ;0x40      2
      retlw      0x0C      ;65         ;0x41      3
      retlw      0x10      ;66         ;0x42      4
      retlw      0x14      ;67         ;0x43      5
      retlw      0x17      ;68         ;0x44      6
      retlw      0x1A      ;69         ;0x45      7
      retlw      0x1F      ;70         ;0x46      8
      retlw      0x24      ;71         ;0x47      9
      retlw      0x29      ;72         ;0x48      10
      retlw      0x2E      ;73         ;0x49      11
      retlw      0x33      ;74         ;0x4A      12
      retlw      0x38      ;75         ;0x4B      13
      retlw      0x3A      ;76         ;0x4C      14
      retlw      0x3D      ;77         ;0x4D      15
      retlw      0x41      ;78         ;0x4E      16
      retlw      0x45      ;79         ;0x4F      17
      retlw      0x49      ;80         ;0x50      18
      retlw      0x4D      ;81         ;0x51      19
      retlw      0x51      ;82         ;0x52      20
      retlw      0x55      ;83         ;0x53      21
      retlw      0x59      ;84         ;0x54      22
      retlw      0x5D      ;85         ;0x55      23
      retlw      0x61      ;86         ;0x56      24
      retlw      0x65      ;87         ;0x57      25
      retlw      0x69      ;88         ;0x58      26
      retlw      0x6D      ;89         ;0x59      27
      retlw      0x71      ;90         ;0x5A      28
      retlw      0x75      ;91         ;0x5B      29
      retlw      0x79      ;92         ;0x5C      30
      retlw      0x7D      ;93         ;0x5D      50%
      retlw      0x7D      ;94         ;0x5E      50%
      retlw      0x81      ;95         ;0x5F      30
      retlw      0x85      ;96          ;0x60      29
      retlw      0x89      ;97            ;0x61      28
      retlw      0x8D      ;98          ;0x62      27
      retlw      0x91      ;99            ;0x63      26
      retlw      0x95      ;100      ;0x64      25
      retlw      0x99      ;101      ;0x65      24
      retlw      0x9D      ;102      ;0x66      23
      retlw      0xA1      ;103      ;0x67      22
      retlw      0xA5      ;104      ;0x68      21
      retlw      0xA9      ;105      ;0x69      20
      retlw      0xAD      ;106      ;0x6A      19
      retlw      0xB1      ;107      ;0x6B      18
      retlw      0xB5      ;108      ;0x6C      17
      retlw      0xB9      ;109      ;0x6D      16
      retlw      0xBD      ;110      ;0x6E      15
      retlw      0xC0      ;111      ;0x6F      14
      retlw      0xC5      ;112      ;0x70      13
      retlw      0xCA      ;113      ;0x71      12
      retlw      0xCF      ;114      ;0x72      11
      retlw      0xD4      ;115      ;0x73      10
      retlw      0xD9      ;116      ;0x74      9
      retlw      0xDE      ;117      ;0x75      8
      retlw      0xE3      ;118      ;0x76      7
      retlw      0xE5      ;119      ;0x77      6
      retlw      0xE6      ;120      ;0x78      5
      retlw      0xEA      ;121      ;0x79      4
      retlw      0xEE      ;122      ;0x7A      3
      retlw      0xF2      ;123      ;0x7B      2
      retlw      0xF6      ;124      ;0x7C      1
      retlw      0xFA      ;125      ;0x7D      100%
      retlw      0xFA      ;126      ;0x7E      
      retlw      0xFA      ;127      ;0x7F      
      retlw      0xFA      ;128      ;0x80      
      retlw      0xFA      ;129      ;0x81      
      retlw      0xFA      ;130      ;0x82      
      retlw      0xFA      ;131      ;0x83      
      retlw      0x00      ;132               
      retlw      0x00      ;133               
      retlw      0x00      ;134               
      retlw      0x00      ;135               
      retlw      0x00      ;136               
      retlw      0x00      ;137               
      retlw      0x00      ;138               
      retlw      0x00      ;139               
      retlw      0x00      ;140               
      retlw      0x00      ;141               
      retlw      0x00      ;142               
      retlw      0x00      ;143               
      retlw      0x00      ;144               
      retlw      0x00      ;145               
      retlw      0x00      ;146               
      retlw      0x00      ;147               
      retlw      0x00      ;148               
      retlw      0x00      ;149               
      retlw      0x00      ;150               
      retlw      0x00      ;151               
      retlw      0x00      ;152               
      retlw      0x00      ;153               
      retlw      0x00      ;154               
      retlw      0x00      ;155               
      retlw      0x00      ;156               
      retlw      0x00      ;157               
      retlw      0x00      ;158               
      retlw      0x00      ;159               
      retlw      0x00      ;160               
      retlw      0x00      ;161               
      retlw      0x00      ;162               
      retlw      0x00      ;163               
      retlw      0x00      ;164               
      retlw      0x00      ;165               
      retlw      0x00      ;166               
      retlw      0x00      ;167               
      retlw      0x00      ;168               
      retlw      0x00      ;169               
      retlw      0x00      ;170               
      retlw      0x00      ;171               
      retlw      0x00      ;172               
      retlw      0x00      ;173               
      retlw      0x00      ;174               
      retlw      0x00      ;175               
      retlw      0x00      ;176               
      retlw      0x00      ;177               
      retlw      0x00      ;178               
      retlw      0x00      ;179               
      retlw      0x00      ;180               
      retlw      0x00      ;181               
      retlw      0x00      ;182               
      retlw      0x00      ;183               
      retlw      0x00      ;184               
      retlw      0x00      ;185               
      retlw      0x00      ;186               
      retlw      0x00      ;187               
      retlw      0x00      ;188               
      retlw      0x00      ;189               
      retlw      0x00      ;190               
      retlw      0x00      ;191               
      retlw      0x00      ;192               
      retlw      0x00      ;193               
      retlw      0x00      ;194               
      retlw      0x00      ;195               
      retlw      0x00      ;196               
      retlw      0x00      ;197               
      retlw      0x00      ;198               
      retlw      0x00      ;199               
      retlw      0x00      ;200               
      retlw      0x00      ;201               
      retlw      0x00      ;202               
      retlw      0x00      ;203               
      retlw      0x00      ;204               
      retlw      0x00      ;205               
      retlw      0x00      ;206               
      retlw      0x00      ;207               
      retlw      0x00      ;208               
      retlw      0x00      ;209               
      retlw      0x00      ;210               
      retlw      0x00      ;211               
      retlw      0x00      ;212               
      retlw      0x00      ;213               
      retlw      0x00      ;214               
      retlw      0x00      ;215               
      retlw      0x00      ;216               
      retlw      0x00      ;217               
      retlw      0x00      ;218               
      retlw      0x00      ;219               
      retlw      0x00      ;220               
      retlw      0x00      ;221               
      retlw      0x00      ;222               
      retlw      0x00      ;223               
      retlw      0x00      ;224               
      retlw      0x00      ;225               
      retlw      0x00      ;226               
      retlw      0x00      ;227               
      retlw      0x00      ;228               
      retlw      0x00      ;229               
      retlw      0x00      ;230               
      retlw      0x00      ;231               
      retlw      0x00      ;232               
      retlw      0x00      ;233               
      retlw      0x00      ;234               
      retlw      0x00      ;235               
      retlw      0x00      ;236               
      retlw      0x00      ;237               
      retlw      0x00      ;238               
      retlw      0x00      ;239               
      retlw      0x00      ;240               
      retlw      0x00      ;241               
      retlw      0x00      ;242               
      retlw      0x00      ;243               
      retlw      0x00      ;244               
      retlw      0x00      ;245               
      retlw      0x00      ;246               
      retlw      0x00      ;247               
      retlw      0x00      ;248               
      retlw      0x00      ;249               
      retlw      0x00      ;250               
      retlw      0x00      ;251               
      retlw      0x00      ;252               
      retlw      0x00      ;253               
      retlw      0x00      ;254               
      retlw      0x00      ;255               

    goto Main_esc
         
    END

joyrus 发表于 2012-6-19 12:28:18

欢迎各路高手批评指导!:$

joyrus 发表于 2012-6-19 18:41:58

开发平台小图

toy2man 发表于 2012-8-6 14:33:58

恭喜,折腾的不错,示波器哪里弄来的?

joyrus 发表于 2012-8-8 17:40:35

恭喜,折腾的不错,示波器哪里弄来的?
toy2man 发表于 2012-8-6 14:33 http://www.joyrus.com/images/common/back.gif

示波器是十几年前收的二手货!
页: [1]
查看完整版本: 我的第一个单片机开源项目——有刷直流电动机PWM调速器的单片机程序