资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
pwm直流电机调速的程序更新2008年 05月 06日 星期二 12:06kg bit B.1 ;用来判断开机等待t bit B.2 ;用来判断正反转,t=1 正转,t=0 反转w bit B.3 ;用来辅助正反转判断,选择了就为 1,不选则为 0KK1 BIT B.4 ;用来辅助加速按键,使其不用延时可以按一次速度只加一档KK2 BIT B.5 ;同上;KK3 BIT B.6 ;用来辅助速度处理程序cctv bit b.7 ;用来辅助中断显示程序计时org 0000hlJMP MAINORG 000BHLJMP CTC0; ORG 001BH; LJMP CTCAORG 0034hGraphemic: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,84H,0FFH;共阳 09 字型码 ;PN1 EQU 30H ;PN1用来记脉冲的低二位数;PN2 EQU 31H ;PN2用来记脉冲的高二位数PN3 EQU 32H ;PN3用来做延时程序PN4 EQU 33H ;PN4用来做延时程序ORG 100HMAIN: MOV R6,#00H ;用 R6来辅助显示计时MOV B, #00HCLR KGCLR WMOV TMOD,#01H ;T1和 T0都是方式一计数MOV TL0,#18HMOV TH0,#0E0H;MOV TL1, #0AFH; MOV TH1, #3CHSETB EASETB ET0 ;T0中断允许SETB TR0SETB P3.4; SETB ET1 ;T1中断允许;SETB TR1 SETB PT0 ;设置 T1T2的中断优先,都设其为高级中断 ; SETB PT1MOV R1,#5H ;默认开始的时候速度为 5档SETB KK1SETB KK2MOV A,#00H ;把 PN1,PN2都清零 ;MOV PN1,A; MOV PN2,AMOV DPTR,#GraphemicANL P1,#0FH;ANL P0,#00Hmainline:jb p2.2,ks ;关机等待clr wclr kgsetb p1.0setb p1.1clr p1.2clr p1.3ks: jnb kg,wait ;是否开机?开了就往下执行,不开就跳到开机等待ANL P1,#00011111B ;显示最后一位为 1,即是可以工作了的意思SETB P1.4MOV A,#1HMOVC A,A+DPTRMOV P0,ASETB P3.6NOPNOPCLR P3.6LCALL DELAYSPD2: JB P2.1,KEY1CLR KK1KEY1: JNB P2.1,KEY2 ;当 p2.1高电平时就往下执行,但是只要执行一次后,kk就为 1,往后就不再执行 JB KK1, KEY2 INC R1SETB KK1 ;这段的任务是不用延时也能消除按键抖动的程序KEY2: JB P2.4,KEY3CLR KK2KEY3: JNB P2.4,pos JB KK2, pos SETB KK2 DEC R1 pos: jb p2.0,rev ;正转按钮setb tsetb wrev: jb p2.3,tt ;反转按钮clr tsetb wtt: jnb w,pos ;选择正反转了吗,选了电机就开始转了,不选电机就不转,等待正反转按钮jb t,positivejnb t,reversepositive: ;电机正转setb p1.0clr p1.1clr p1.2setb p1.3lcall BIJIAO0 ;PWM调制; lcall ShowSpeed ;显示速度程序LCALL showdigit1Ljmp mainlinereverse: ;电机反转clr p1.0setb p1.1setb p1.2clr p1.3lcall BIJIAO0 ;PWM调制; lcall ShowSpeed ;显示速度程序LCALL showdigit2Ljmp mainlinewait: mov a,#00h ;如果不开始,那么程序就在这里等待,mov p0,a wait1: setb p0.6setb p0.7anl p1,#0fhsetb p1.4setb p1.5setb p1.6setb p1.7SETB P3.6NOP CLR P3.6lcall delayjb p2.5,wait1 ;开机等待setb kgLjmp mainlineshowdigit1:ANL P1,#10001111B ;显示 12在首位SETB P1.7MOV A,#1HMOVC A,A+DPTRMOV P0,ASETB P3.6NOPNOPCLR P3.6LCALL DELAYANL P1,#01001111BSETB P1.6MOV A,#2HMOVC A,A+DPTRMOV P0,ASETB P3.6NOPNOPCLR P3.6LCALL DELAYRETshowdigit2:ANL P1,#10001111B ;显示 21在首位SETB P1.7MOV A,#2HMOVC A,A+DPTRMOV P0,ASETB P3.6NOPNOPCLR P3.6LCALL DELAYANL P1,#01001111BSETB P1.6MOV A,#1HMOVC A,A+DPTRMOV P0,ASETB P3.6 NOPNOPCLR P3.6LCALL DELAYRET;ShowSpeed: ;由于没有买到光电编码器,所以智能把数码管显示换成其他的功能; MOV A,R6; SUBB A,#3FH ;7Dh=125即 1000/8=125秒; JNZ else1; MOV R6,#00H;可以每秒重复输出很多次,才能在数码管里显示出来,但是还要再定义两个变量; ANL P1,#0FH ;置位(输出个位); SETB P1.4; CLR P3.6; MOV A,PN1 ;把最低速度的个位输出; ANL A,#0FH ;把 A和 0F相与,求出 A的低四位字节表示的数; MOVC A,A+DPTR; MOV P0,A ;输出个位数; SETB P3.6; NOP; CLR P3.6 ; LCALL DELAY ;加延时程序; ; ANL P1,#2FH ;置位(输出十位); SETB P1.5; MOV A,PN1; SWAP A ;高四位和低四位内容交换; ANL A,#0FH ;把低四位清零,然后输出十位的数; MOVC A,A+DPTR; MOV P0,A ;输出十位; SETB P3.6; NOP; CLR P3.6; LCALL DELAY;加延时程序; ANL P1,#4FH ;置位(输出百位数); SETB P1.6; MOV A,PN2; ANL A,#0FH; MOVC A,A+DPTR; MOV P0,A ;输出百位数; SETB P3.6; NOP; CLR P3.6; LCALL DELAY;加延时; ANL P1,#8FH ;置位(输出千位数); SETB P1.7; MOV A,PN2; SWAP A; ANL A,#0FH; MOVC A,A+DPTR; MOV P0,A ;输出千位数 ; SETB P3.6; NOP ; CLR P3.6; LCALL DELAY ;else1: ; JB P3.3,SPD1 ;这以段的任务是不用延时也能消除按键抖动的程序; CLR KK3;SPD1: JNB P3.3,SPD2 ;当 p3.3高电平时就往下执行,但是只要执行一次后,kk 就为 1,往后就不再执行 ; JB KK3,SPD2 ; MOV A,PN1 ; INC PN1; CLR CY ;清空进位位 ; MOV A,PN1; DA A; MOV PN1,A; JNB CY,XIAMIAN ;如果最高位产生进位,就在高一位 PN2加一; INC PN2 ;XIAMIAN: MOV PN1,A ; SETB KK3 ; CLR PN1; INC PN2; MOV A,PN2; DA A; MOV PN2,A;ShowSpeedEnd: RETBIJIAO0: MOV A,R1 SUBB A,#0H JZ JJ0BIJIAO1: MOV A,R1SUBB A,#1HJZ JJ1BIJIAO2: MOV A,R1SUBB A,#2HJZ JJ2BIJIAO3: MOV A,R1SUBB A,#3HJZ JJ3BIJIAO4: MOV A,R1SUBB A,#4HJZ JJ4BIJIAO5: MOV A,R1SUBB A,#5HJZ JJ5BIJIAO6: MOV A,R1SUBB A,#6HJZ JJ6BIJIAO7: MOV A,R1SUBB A,#7HJZ JJ7BIJIAO8: MOV A,R1SUBB A,#8HJZ JJ8BIJIAO9: MOV A,R1SUBB A,#9HJZ JJ9BIJIAO10:MOV A,R1SUBB A,#0AHJZ JJ10MOV A,R1 ;如果 R1的值小于零,则速度和 pwm0的速度不变。SUBB A,#0FFH JNZ PWM100 ;这一小段是限制调速范围只能在 0-10之间MOV R1,#0HAJMP PWM0PWM100: MOV R1,#0AH ;如果 r110则直接给 r1赋值 10,然后转速和最大速度不变LJMP PWM10 JJ0: LJMP PWM0 ;由于 JZ跳转的距离不够长,所以这里只能用以下几句转跳转来辅助跳转JJ1: LJMP PWM1JJ2: LJMP PWM2JJ3: LJMP PWM3JJ4: LJMP PWM4JJ5: LJMP PWM5JJ6: LJMP PWM6JJ7: LJMP PWM7JJ8: LJMP PWM8JJ9: LJMP PWM9JJ10: LJMP PWM10PWM0: MOV R2
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号