推扬网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
推扬网 门户 你问我答 查看内容

李建军:80c51单片机程序实例

2020-8-10 20:36| 发布者: admin| 查看: 106| 评论: 0

摘要: 黄志平的回答: 给你发个产品的真实程序,控制交流滑差电机,既检测控制速度,又检测实际速度,还根据检测值控制电机在控制速度值下平稳运行。 ORG 0000H ;主轴控制程序 START: AJMP MAIN ; REALSPDL EQU 30H REALSP ...

黄志平的回答:

给你发个产品的真实程序,控制交流滑差电机,既检测控制速度,又检测实际速度,还根据检测值控制电机在控制速度值下平稳运行。 ORG 0000H ;主轴控制程序 START: AJMP MAIN ; REALSPDL EQU 30H REALSPDH EQU 31H CMPSPDL EQU 32H CMPSPDH EQU 33H ADJSPD EQU 34H BKCNT EQU 35H T0COUNT EQU 36H T1COUNT EQU 37H IOSPDL EQU 38H IOSPDH EQU 39H T_TMP EQU 3AH T_MS EQU 3BH T_250MS EQU 3CH CH1 EQU 3AH CH2 EQU 3BH UPSPD EQU 2 DNSPD EQU 2 STOPB EQU P1.4 RUNB EQU P1.3 LAMPB EQU P3.7 PZB EQU P3.4 PAB EQU P3.3 SPDB EQU P3.2 BREAKB EQU P1.1 ENABLE EQU P1.0 ;----------------------------------- ORG 0003H SJMP IE0DEAL ORG 000BH SJMP TF0DEAL ORG 0013H SJMP IE1DEAL ORG 001BH SJMP TF1DEAL ORG 0023H SJMP RITIDEAL ;------------------------------------ ORG 0030H IE0DEAL: CLR TR0 MOV IOSPDL,TL0 MOV IOSPDH,TH0 MOV TL0,#0 MOV TH0,#0 SETB TR0 PUSH ACC CLR 02H MOV A,REALSPDH CLR C SUBB A,#2 JC IE0D2 SETB 02H IE0D2: POP ACC IE0D3: RETI ;------------------------------------ TF0DEAL: SETB 01H RETI ;------------------------------------ IE1DEAL: CLR TR1 MOV REALSPDL,TL1 MOV REALSPDH,TH1 MOV TL1,#0 MOV TH1,#0 SETB TR1 JB 03H,IE1D1 INC T1COUNT MOV A,T1COUNT CLR C SUBB A,#250 JC IE1D1 MOV T1COUNT,#0 INC T0COUNT MOV A,T0COUNT CLR C SUBB A,#4 JC IE1D1 MOV T0COUNT,#0 SETB 03H IE1D1: CLR 01H RETI ;------------------------------------ TF1DEAL: SETB 01H MOV REALSPDL,#0FFH MOV REALSPDH,#0FFH RETI ;------------------------------------ RITIDEAL: RETI ;****************************************************************************** DELAY2: MOV T_TMP,#0F9H ;0FAH=1ms DJNZ T_TMP,$ DJNZ T_MS,DELAY2 ;3EH=?ms RET ;------------------------------------------------------------------------------ DELAY3: MOV T_MS,#0FAH ;0FAH=250ms LCALL DELAY2 DJNZ T_250MS,DELAY3 ;3FH=?*250ms RET ;------------------------------------ MAIN: CLR EA CLR ET0 CLR ET1 CLR EX0 CLR EX1 CLR TR0 CLR TR1 SETB RUNB SETB STOPB MOV SP,#60H MOV TMOD,#11H MOV TCON,#05H MOV TL0,#0 MOV TH0,#0 MOV TL1,#0 MOV TH1,#0 MOV T_250MS,#20 LCALL DELAY3 SETB TR0 SETB TR1 SETB ET0 SETB ET1 SETB EX0 SETB EX1 SETB EA MOV T1COUNT,#0 MOV T0COUNT,#0 SETB BREAKB SETB ENABLE SETB 01H CLR 03H CLR 04H SETB RUNB SETB STOPB MOV T_MS,#100 LCALL DELAY2 INIT: JB RUNB,LOOP MOV T_MS,#200 LCALL DELAY2 CPL P3.7 SJMP INIT LOOP: JNB RUNB,CONTINUE LOOP0: JNB STOPB,STOPP RESUME: SETB BREAKB SETB ENABLE SETB 01H CLR P3.7 MOV TL0,#0 MOV TH0,#0 MOV TL1,#0 MOV TH1,#0 MOV T1COUNT,#0 MOV T0COUNT,#0 MOV BKCNT,#0 CLR 03H CLR 04H SJMP LOOP CONTINUE: JB 01H,CNT1 LCALL COMPARE JZ CNT3 CJNE A,#0FFH,CNT2 CNT1: SETB BREAKB CLR ENABLE SJMP LOOP CNT2: SETB BREAKB SETB ENABLE SJMP LOOP CNT3: JB 02H,CNT2 JNB 03H,CNT2 CLR BREAKB SETB ENABLE CNT4: SJMP LOOP ;------------------------------------ STOPP: CLR BREAKB SETB ENABLE STOPP1: JNB STOPB,STOPP1 SETB BREAKB SETB ENABLE SJMP LOOP ;------------------------------------ COMPARE: MOV A,REALSPDL ADD A,#1 MOV CMPSPDL,A MOV A,REALSPDH ADDC A,#0 MOV CMPSPDH,A CLR C MOV A,CMPSPDL SUBB A,IOSPDL MOV CMPSPDL,A MOV A,CMPSPDH SUBB A,IOSPDH MOV CMPSPDH,A JC COM11 ;MORE JZ COM12 COM10: MOV A,#0FFH RET COM11: MOV A,#00H RET COM12: LCALL GETADJ CLR C MOV A,CMPSPDL SUBB A,ADJSPD JNC COM10 MOV A,#0A0H RET ;------------------------------------ GETADJ: MOV A,IOSPDH JNZ GETADJ0 MOV A,IOSPDL SUBB A,#79 JNC GETADJ01 MOV ADJSPD,#3 ;>700 RET GETADJ01: SUBB A,#32 JNC GETADJ03 MOV ADJSPD,#6 ;500~700 RET GETADJ03: SUBB A,#73 JNC GETADJ04 MOV ADJSPD,#10 ;300~500 RET GETADJ04: MOV ADJSPD,#16 ;216~300 RET GETADJ0: MOV A,REALSPDH SUBB A,#2 JC GETADJ1 MOV ADJSPD,#3 ;<108 RET GETADJ1: MOV A,REALSPDL SETB C RRC A SUBB A,#150 JNC GETADJ2 MOV ADJSPD,#24 ;>200 RET GETADJ2: SUBB A,#50 JNC GETADJ3 MOV ADJSPD,#48 ;150~200 RET GETADJ3: MOV ADJSPD,#96 ;<150 RET ;------------------------------------ END

吉世光的回答:

好多 ,留个联系方式,我给你发一个

╰︶如果、阳光雨。的回答:

#include unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char sec; //定义计数值,每过1/10秒,sec加一 unsigned char keycnt=0; unsigned int tcnt; //键值判断 sbit gewei=p2^6; //个位选通定义 sbit shiwei=p2^7; //十位选通定义 void delay(unsigned int tc) //延时程序 { while( tc != 0 ) { unsigned int i; for(i=0; i<100; i++); tc--; } } void led() //led显示函数 { shiwei=0; p0=table[sec/10]; delay(8); shiwei=1; gewei=0; p0=table[sec%10]; delay(5); gewei=1; } void key() //按键扫描程序 { unsigned char i,j; if(p3^0==0) { for(i=20;i>0;i--) //延时去干扰 for(j=248;j>0;j--); if(p3^0==0) { keycnt++; switch(keycnt) //按下次数判断 { case 1: //第一次按下 th0=0x06; //对th0 tl0赋值 tl0=0x06; tr0=1; //开始定时 break; case 2: //第二次按下 tr0=0; //定时结束 break; case 3: //第三次按下 keycnt=0; //重新开始判断键值 sec=0; //计数重新从零开始 break; } while(p3^0==0); } } } //请注意写程序时的格式规范,此处是为了节省纸张 void t0(void) interrupt 1 using 0 //定时中断服务函数 { tcnt++; //每过250ust tcnt加一 if(tcnt==400) //计满400次(1/10秒)时 { tcnt=0; //重新再计 sec++; if(sec==100) //定时10秒,在从零开始计时 { sec=0; } } } void main(void) { tmod=0x02; //定时器工作在方式2 et0=1; ea=1; sec=0; while(1) { key(); led(); } }

郑娅琳的回答:

建议 去 我的领地 5d6d 的 proteus 论坛看看 那里有很多 单片机仿真实例,包括仿真图 和 源码 搜 5d6d 和 proteus 2个关键词


鲜花

握手

雷人

路过

鸡蛋

最新评论

热门推荐
最新资讯

广告服务|投稿要求|禁言标准|版权说明|免责声明|手机版|小黑屋|推扬网 ( 粤ICP备18134897号 )|网站地图 | 邮箱:vayae@hotmail.com

GMT+8, 2025-6-15 10:52 , Processed in 0.069029 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

返回顶部