




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、光电编码器输出正交信号方式如下图所示: 顺时针旋转A超前B相信号90°: A: _|-|_|-|_ B: _|-|_|-| 逆时针旋转B相信号超前A相信号90°: A:_|-|_|-|_ B:_|-|_|-|_ 下面是AT89C2051检测并进行二倍频程序: ;采用外部中断方式 ORG 00H LJMP MAIN ORG 03H LJMP INT0 ORG 13H LJMP INT1 ORG 50H MAIN: MOV SP,#40H MOV P3,#0FFH MOV IE,#10000101B ;设定外部中断 MOV TCON,#00000101B SETB EA MA1
2、: MOV P1,#0FFH MOV P3,#0FFH SJMP MA1 ;* INT0: PUSH PSW CLR EA I0: JNB P1.0,FAN CLR P3.4 SJMP INT0END FAN: CLR P3.5 INT0END: POP PSW SETB EA MOV P3,#0FFH RETI INT1: PUSH PSW CLR EA JNB P1.0,ZHENG CLR P3.5 SJMP INT1END ZHENG: CLR P3.4 INT1END: POP PSW SETB EA MOV P3,#0FFH RETI 处理后由P3.4P3.5分别在顺时针和逆时针时输
3、出脉冲信号,送入AT89C51的T0,T1进行计数 下面是计数及处理程序 AT89C51负责信号处理并在12864液晶显示模块上把实际值显示出来,分辨率0.05MM 液晶模块用的金鹏的OCMJ4X8C RS EQU P0.0 ;选择I/O口定义,RS为指令/数据选择端 RW EQU P0.1 E EQU P0.2 ;选择I/O口定义,E为使能端 PSB EQU P0.3 RESET EQU P0.4 FIRST_COL EQU 36H ;定义字符/汉字显示起始行 FIRST_ROW EQU 37H ;定义字符/汉字显示起始列 WORD_WID EQU 38H ;定义字符/汉字显示长度 WORD
4、_LIN EQU 39H ;定义字符/汉字显示行数 FIRST_ADD EQU 3AH ;定义字符/汉字显示起始位置 START_ADD EQU 3BH ;起始位置缓存单元 FIRST_LIN EQU 3CH ;起始行位置缓存单元 A0 EQU 30H A1 EQU 31H ; A2 EQU 32H B0 EQU 33H B1 EQU 34H Z0 EQU 35H ; Z5 BIT 20H.0 ;正反负数标志 ORG 00H LJMP MAIN ORG 0BH LJMP TT0 ORG 1BH LJMP TT1 ORG 50H MAIN: MOV SP,#40h SETB RESET SETB
5、 PSB CLR RW MOV A0,#00H MOV A1,#00H MOV A2,#00H MOV B0,#00H MOV B1,#00H CLR Z5 MOV TMOD,#66H ;定时器定时方式2,自动装载 MOV TH0,#0ECH ;计够20个脉冲产生次中断 MOV TL0,#0ECH ;设检测盘周长为250MM,1P脉冲为0.05MM MOV TH1,#0ECH ;2P脉冲为0.1MM,20P为1MM,200P为10MM MOV TL1,#0ECH SETB TR0 SETB TR1 SETB ET1 SETB ET0 SETB EA QIU1: LCALL INITIL ;调用
6、系统初始化程序 MOV A, #0CH ;开显示,关游标 LCALL INPUT LCALL DELAY01 MOV A, #01H ;DDRAM清零,DDRAM地址计数器到00H LCALL INPUT LCALL DELAY01 LCALL QIU2 QIU3: LCALL INITIL ;调用系统初始化程序 MOV A, #0CH ;开显示,关游标 LCALL INPUT LCALL DELAY01 MOV A, #01H ;DDRAM清零,DDRAM地址计数器到00H LCALL INPUT LCALL DELAY01 MOV FIRST_ADD,#00H ;设定字符/汉字显示起始位置
7、为第一个显示单元 MOV FIRST_LIN,#01H ;设定字符/汉字显示起始位置为第一行 MOV word_WID,#08H ;每行显示汉字个数 MOV word_LIN,#04H ;显示行数 MOV START_ADD,#00H ;清首个显示地址缓存单元 SETB TR0 LJMP QIU2 ;-* QIU: LJMP QIU1 ;* TT0: PUSH PSW ;计够20P脉冲中断发生即1MM PUSH A MOV A,A2 JNZ T00 MOV A,A1 JNZ T00 MOV A,A0 JNZ T00 CLR Z5 T00: JB Z5,T02 MOV A,A0 ADD A,#0
8、1H DA A MOV A0,A CJNE A,#00H,TT0END ;够100即100mm ;MOV A0,#00H MOV A,A1 ADD A,#01H DA A MOV A1,A CJNE A,#00H,TT0END ;够100即10000MM=10M ; MOV A1,#00H MOV A,A2 ADD A,#01H DA A MOV A2,A CJNE A,#03H,TT0END ;够3即30M MOV A2,#00H MOV A1,#00H MOV A0,#00H CLR Z5 SJMP TT0END T02: MOV A,A0 ADD A,#99H ;-1程序 DA A MO
9、V A0,A CJNE A,#99H,TT0END ;有借位产生执行下面程序 ; MOV A0,A MOV A,A1 ADD A,#99H DA A MOV A1,A CJNE A,#99H,TT0END ; MOV A1,#00H MOV A,A2 JNZ T03 ADD A,#99H DA A MOV A2,A CJNE A,#99H,TT0END MOV A2,#00H MOV A1,#00H MOV A0,#00H T03: CLR Z5 TT0END: POP A POP PSW RETI ;* TT1: PUSH PSW PUSH A MOV A,A2 JNZ T10 MOV A,
10、A1 JNZ T10 MOV A,A0 JNZ T10 SETB Z5 T10: JB Z5,T11 MOV A,A0 ADD A,#99H DA A MOV A0,A CJNE A,#99H,TT1END MOV A,A1 ADD A,#99H DA A MOV A1,A CJNE A,#99H,TT1END MOV A,A2 ADD A,#99H DA A MOV A2,A CJNE A,#99H,TT1END MOV A2,#00H MOV A1,#00H MOV A0,#00H T110: SETB Z5 SJMP TT1END T11: MOV A,A0 ADD A,#01H DA
11、A MOV A0,A CJNE A,#00H,TT1END ;够100即100mm MOV A0,#00H MOV A,A1 ADD A,#01H DA A MOV A1,A CJNE A,#00H,TT1END ;够100即10000MM=10M MOV A1,#00H MOV A,A2 ADD A,#01H DA A MOV A2,A CJNE A,#00H,TT1END ;够100即100M MOV A2,#00H SETB Z5 TT1END: POP A POP PSW RETI ;* INITIL: LCALL DELAY ;延时 ;首先选择基本指令集 MOV A, #30H ;3
12、0-基本指令操作 LCALL INPUT ;调写入子程序 LCALL DELAY01 MOV A, #01H ;指令#01H为:清除屏幕文字,把地址指针指向00H单元 LCALL INPUT ;调写入子程序 LCALL DELAY01 MOV A, #06H ;指定在资料写入或读取时,设定游标的移动方向及指定显示的移位 LCALL INPUT LCALL DELAY01 RET ;- ;汉字显示子程序 ;- QIU2: ;*1* MOV A,#80H LCALL INPUT MOV R1,#08H MOV DPTR,#TA WORD1: CLR A ;因为要连续输入机内码高位(区码)、低位(位
13、码) MOVC A, A+DPTR ;所以要输入两次数据,如果是字符就是输入两个字符字符代码可以看说明书 LCALL DISPL ;DATA INPUT INC DPTR ;显示地址会自动加一,如果连续写就不用再输入地址,空白可用某空白汉字或字符代替 CLR A MOVC A, A+DPTR LCALL DISPL ;DATA INPUT LCALL DELAY01 INC DPTR DJNZ R1,WORD1 ;*2* MOV A,#90H LCALL INPUT MOV DPTR,#TB1 MOV R1,#08H WORD2: CLR A ;因为要连续输入机内码高位(区码)、低位(位码)
14、MOVC A, A+DPTR ;所以要输入两次数据,如果是字符就是输入两个字符字符代码可以看说明书 LCALL DISPL ;DATA INPUT INC DPTR ;显示地址会自动加一,如果连续写就不用再输入地址,空白可用某空白汉字或字符代替 CLR A MOVC A, A+DPTR LCALL DISPL ;DATA INPUT LCALL DELAY01 INC DPTR DJNZ R1,WORD2 ;*3* MOV A,#88H LCALL INPUT MOV DPTR,#TB2 MOV R1,#08H WORD3: CLR A ;因为要连续输入机内码高位(区码)、低位(位码) MOV
15、C A, A+DPTR ;所以要输入两次数据,如果是字符就是输入两个字符字符代码可以看说明书 LCALL DISPL ;DATA INPUT INC DPTR ;显示地址会自动加一,如果连续写就不用再输入地址,空白可用某空白汉字或字符代替 CLR A MOVC A, A+DPTR LCALL DISPL ;DATA INPUT LCALL DELAY01 INC DPTR DJNZ R1,WORD3 ;*位移显示处理区* HUANSUAN: CLR C MOV A,TL0 MOV B,TL1 SUBB A,B JNC SS0 ;有借位说明A是负数,即补码,要调整后使用 CPL A INC A
16、SS0: MOV Z0,A ;*小数转换* CLR C MOV A,Z0 MOV B,#5 MUL AB MOV Z0,A MOV A,Z0 MOV B,#100 DIV AB MOV A,B MOV B,#10 DIV AB MOV B0,A MOV B1,B ;*至此小数位转换完毕* JNB Z5 ,SS4 MOV A,#89H LCALL INPUT CLR A MOV DPTR,#TA0 MOVC A,A+DPTR LCALL WE CLR A MOV DPTR,#TA1 MOVC A,A+DPTR LCALL WE SJMP SS5 SS4: MOV A,#89H LCALL INP
17、UT CLR A MOV DPTR,#TA0 MOVC A,A+DPTR LCALL WE MOV A,#20H LCALL WE SS5: MOV A,#8AH LCALL INPUT MOV DPTR,#TAB1 MOV A,A2 LCALL WD1 MOV A,A2 LCALL WD2 MOV A,A1 ;8B LCALL WD1 MOV A,A1 LCALL WD2 ;8C MOV A,A0 LCALL WD1 MOV A,A0 LCALL WD2 MOV A,#8EH LCALL INPUT MOV A,B0 LCALL WD2 MOV A,B1 LCALL WD2 ;*4* MOV
18、 A,#98H LCALL INPUT MOV DPTR,#TAB1 ; MOV R1,#08H WORD4: ;CLR A ;因为要连续输入机内码高位(区码)、低位(位码) ; MOVC A, A+DPTR ;所以要输入两次数据,如果是字符就是输入两个字符字符代码可以看说明书 ; LCALL DISPL ;DATA INPUT ; INC DPTR ;显示地址会自动加一,如果连续写就不用再输入地址,空白可用某空白汉字或字符代替 ; CLR A ; MOVC A, A+DPTR ; LCALL DISPL ;DATA INPUT ; LCALL DELAY01 ; INC DPTR ; DJN
19、Z R1,WORD4 MOV A,TL0 LCALL WD1 MOV A,TL0 LCALL WD2 MOV A,TL1 LCALL WD1 MOV A,TL1 LCALL WD2 ;2 MOV A,#20H LCALL WE MOV A,#20H LCALL WE MOV A,A2 LCALL WD1 MOV A,A2 LCALL WD2 MOV A,A1 LCALL WD1 MOV A,A1 LCALL WD2 ;2 MOV A,A0 LCALL WD1 MOV A,A0 LCALL WD2 MOV A,#20H LCALL WE MOV A,#20H LCALL WE ;2 JB Z5,
20、S0 MOV A,#00H LCALL WD1 MOV A,#00H LCALL WD2 LJMP QIU3 S0: MOV A,#11H LCALL WD1 MOV A,#11H LCALL WD2 LJMP QIU3 ;* WD1: ANL A,#0F0H SWAP A MOVC A,A+DPTR LCALL DISPL LCALL DELAY01 RET WD2: ANL A,#0FH MOVC A,A+DPTR WE: LCALL DISPL LCALL DELAY01 RET WR: CLR A MOVC A,A+DPTR LCALL DISPL INC DPTR CLR A MOV
21、C A,A+DPTR LCALL DISPL CLR A LCALL DELAY01 RET READ: MOV P3, #0FBH ;读数据子程序 ;p3-CONTRAL I/O NOP ;p3=11111011B RS=1 R/W=1 READ DATA SETB E ;E=E(I/O LCALL DELAY01 MOV A, P1 ;p1=DATA(I/O NOP CLR E RET ;- CHK_BUSY: CLR RS ;读忙状态子程序 SETB RW SETB E HEHE1: JB P1.7,HEHE1 CLR E RET ;- ;写数据子程序 ;- DISPL: LCALL C
22、HK_BUSY ;p3-CONTRAL I/O NOP ;p3=11111001B RS=1 WRITE DATA SETB RS CLR RW SETB E ;E=E(I/O MOV P1, A ;p1=DATA(I/O LCALL DELAY01 NOP CLR E NOP MOV P1,#0FFH RET ;- ;写指令子程序 ;- INPUT: LCALL CHK_BUSY ;以确保上一指令/数据模块已经接收处理完 ;p3-CONTRAL I/O NOP ;p3=11111000B RS=0 WRITE INSTRUTION CLR RS CLR RW SETB E ;E=E(I/O MOV P1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省六校2025届高三下学期联考化学试题含解析
- 2025年文化、办公用设备或器具项目投资风险评估报告
- 2025年高低压费控系统项目建议书
- 跨境电子商务与仓储的关系试题及答案
- 2024年国际物流师考试应试策略试题及答案
- 浙江省“温州八校”2025届高考全国统考预测密卷化学试卷含解析
- 湖北省部分高中协作体2025届高三下学期3月一模联考历史试题答案
- 2025年全数字摄影测量系统项目合作计划书
- CPSM考试智能化复习试题及答案
- 了解国际物流师职业的多样性和含义与试题及答案
- 新版GCP培训课件
- 2025建设工程监理合同示范文本
- 大模型落地应用实践方案
- 高速公路网命名和编号规定(附条文说明)
- 社会工作法规与政策中级考前冲刺题库300题(带详解)
- 体检中心培训内容
- 2025版股权对赌协议转让合同范本:风险投资合同
- 无人机救援任务操作培训方案
- 独家模特签约正规合同范例
- DB51T 2860-2021“天府名品”认证通 用规范
- 慢病控制体重
评论
0/150
提交评论