完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
修改了两天,还剩3处错误,大神快来救场
ORG 0000H AJMP MAIN ORG 000BH ;定时器T0中断 AJMP tiMER0 ORG 001BH ;定时器T1中断 AJMP CONTER1 ORG 0100H AJMP DIS MOV SCON,#00H ;串行口工作方式0 MAIN: CLR 06H ;清定时时间到标志位 CLR P1.6 ;产生清0用负脉冲 NOP SETB P1.6 MOV TMOD,#59H MOV TH0,#3CH ;T/C0外部启动定时,T/C1计数 MOV TL0,#0B0H MOV TH1,#00H ;T/C1方式1由00H开始计数 MOV TL1,#00H MOV R7,#0AH ;计数10个100ms SETB TR0 ;T/C0启动 SETB TR1 ;T/C1启动 SETB PT0 ;定时器0为高中断优先级 SETB ET0 ;开T/C0中断 SETB ET1 ;开T/C1中断 SETB EA ;CPU开中断 NOP; CLR P1.5 HE: JNB 06H,HE CLR P1.6 ;产生时1s时间到 NOP ;产生负脉冲,封锁G2 SETB P1.6 CLR TR0 ;关闭定时器 CLR TR1 ;关闭定时器 LCALL DATAP ;调数据处理子程序 LCALL DIS ;调显示子程序 LCALL SAVE ;调存储子程序 LCALL BAOJING ;调报警子程序 SJMP MAIN TIMER0: MOV TH0,3CH ;T/C0中断服务程序 MOV TL0,# 0B0H DJNZ R7,RE MOV R7,0AH SETB 06H ;1s定时时间到 RE: RETI ;T/C0中断返回 CONTER1: RETI ;T/C1中断返回 DATAP: MOV R2,TH1 ;脉冲数 MOV R3,TL1 MOV R6,#00H MOV R7,#60H AJMP MULD LCALL DIS MOV R2,TH1 MOV R3,TL1 MOV R6,#00H MOV R7,#33H AJMP MULD LCALL DIS1 MOV R1,#3CH SUBB R1,R5 SADS.ASM(59): error A40: INVALID REGISTER CJNE R1,#00H,BAOJING RET BAOJING: MOV TMOD,#01H ;置T0为方式1外部计数 MOV TH0,#3CH ;置寄存器初值 MOV TL0,#0B0H CLR TF0 ;定时器溢出清0 SETB TR0 ;启动T0 MULD: MOV A,R3 ;计算R3乘R7 MOV B,R7 MUL AB MOV R4,B ;暂存部分积 MOV R5,A MOV A,R3 ;计算R3乘R6 MOV B,R6 MUL AB ADD A,R4 ;累加部分积 MOV R4,A CLR A ADDC A,B MOV R3,A MOV A,R2 ;计算R2乘R7 MOV B,R7 MUL AB ADD A,R4 ;累加部分积 MOV R4,A MOV A,R3 ADDC A,B MOV R3,A CLR A RLC A XCH A,R2 ;计算R2乘R6 MOV B,R6 MUL AB ADD A,R3 ;累加部分积 MOV R3,A MOV A,R2 ADDC A,B MOV R2,A RET DATAP1: MOV R4,TH1 MOV R5,TL1 MOV R7,#0FH LCALL D457 D457: CLR C MOV A,R4 SUBB A,R7 JC DV50 SETB OV ;商溢出 RET DV50: MOV R0,#8 ;求平均值 DV51: MOV A,R5 RLC A MOV R5,A MOV A,R4 RLC A MOV R4,A MOV F0,C CLR C SUBB A,R7 ANL C,F0 JC DV52 MOV R4,A DV52: CPL C MOV A,R6 RLC A MOV R6,A DJNZ R0,DV51 MOV A,R4 ADD A,R4 JC DV53 SUBB A,R7 JC DV54 DV53: INC R6 DV54: CLR OV RET DIS: MOV R3,#00H ;字型码初始地址 LOOP: MOV R4,#0E8H ;循环显示某个字符 DELAY: ACALL DISPLAY ;显示 DJNZ R4,DELAY ;延时时间未到继续 INC R3 ;显示下个字符 CJNE R3,#0AH,LOOP ;未显示到"9"继续 AJMP DIS ;返回主程序 DISPLAY: CLR P2.0 CLR P2.1 ;选中第一位 ACALL DISP ;显示 ACALL DELAY1 ;延时10ms SETB P2.1 ;选中第二位 ACALL DISP ACALL DELAY1 SETB P2.0 ;选中第三位 CLR P2.1 ACALL DISP ACALL DELAY1 SETB P2.0 ;选中第四位 SETB P2.1 ACALL DISP ACALL DELAY1 LCALL EEPW LCALL EEPR RET DISP: MOV A,R3 MOV DPTR,#TABLE MOVC A,@A+DPTR ;查表 MOV SBUF,A ;送发送缓冲器 WAIT: JNB TI,WAIT ;等待串行中断 CLR TI ;清中断标志 RET DELAY1: MOV R6,#10H ;延时子程序 LOOP1: MOV R7,#38H LOOP2: DJNZ R7,LOOP2 DJNZ R6,LOOP1 RET TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H KEY: MOV R0,#0FH KEY1: MOV P1,R0 MOV A,P1 ;输入键盘信息 ANL A,R0 CLR C SUBB A,R0 JZ KEY1 ;有键按下? ACALL DELAY1 ;有,去抖动 MOV A,P1 ;读键信息 JNB ACC.0,DIS ;为0键按下,转DIS程序 JNB ACC.1,DIS1 ;为1键按下,转DIS 1程序 SJMP KEY DIS1: MOV R3,#00H ;字型码初始地址 LOOP3: MOV R4,#0E8H ;循环显示某个字符 DELAY2: ACALL DISPLAY1 ;显示 DJNZ R4,DELAY2 ;延时时间未到继续 INC R3 ;显示下个字符 CJNE R3,#0AH,LOOP1 ;未显示到"9"继续 AJMP DIS1 ;返回主程序 DISPLAY1:CLR P2.2 ;选中第一位 ACALL DISP ;显示 ACALL DELAY3 ;延时10ms SETB P2.3 ;选中第二位 ACALL DISP ACALL DELAY3 SETB P2.4 ;选中第三位 ACALL DISP ACALL DELAY3 SETB P2.5 ;选中第四位 ACALL DISP ACALL DELAY3 SETB P2.6 ;选中第五位 ACALL DISP ACALL DELAY3 SETB P2.7 ;选中第六位 ACALL DISP ACALL DELAY3 LCALL EEPW LCALL EEPR RET DISP1: MOV A,R3 MOV DPTR,#TABLE MOVC A,@A+DPTR ;查表 MOV SBUF,A ;送发送缓冲器 WAIT1: JNB TI,WAIT1 ;等待串行中断 CLR TI ;清中断标志 RET DELAY3: MOV R6,#10H LOOP4: MOV R7,#38H LOOP5: DJNZ R7,LOOP5 DJNZ R6,LOOP4 RET SCL BIT P3.4 ;定义24C16的串行时钟线 SDA BIT P3.5 ;定义24C16的串行数据线 SAVE: LCALL STAR ;调用 MOV R2,#08H ;一个数据有8位 MOV DPTR,#0600H ;定义源数据的位置 LOOP6: MOV A,#00H MOVC A,@A+DPTR LCALL SDATA LCALL ACK JC LOOP6 INC DPTR DJNZ R2,LOOP6 LCALL STOP ;调用停止子程序 STAR: SETB SDA SETB SCL NOP NOP NOP NOP CLR SDA NOP NOP NOP NOP CLR SCL RET SDATA: MOV R0,#08H LOOP7: RLC A MOV SDA,C NOP NOP SETB SCL NOP NOP NOP NOP CLR SCL DJNZ R0,LOOP7 RET ACK: SETB SDA NOP NOP SETB SCL NOP NOP NOP NOP MOV C,SDA CLR SCL RET STOP: CLR SDA NOP NOP NOP NOP SETB SCL NOP NOP NOP NOP SETB SDA NOP NOP NOP NOP RET ORG 0600H DB 0A0H,10H,01H,02H,03H,04H,05H,06H ;写串行E2PROM子程序EEPW EEPW: MOV P1,#0FFH CLR P1.0 ;发开始信号 MOV A,R3 ;送器件地址 ACALL SUBS MOV A,R4 ;送片内字节地址 ACALL SUBS AGAIN: MOV A,@R1 ACALL SUBS ;调发送单字节子程序 INC R1 DJNZ R7,AGAIN ;连续写n个字节 CLR P1.0 ;SDA置0, 准备送停止信号 ACALL DELAY ;延时以满足传输速率要求 SETB P1.1 ;发停止信号 ACALL DELAY SETB P1.0 RET SUBS: MOV R0,#08H ;发送单字节子程序 LOOP8: CLR P1.1 RLC A MOV P1.0,C NOP SETB P1.1 ACALL DELAY DJNZ R0,LOOP8 ;循环8次送8个bit CLR P1.1 ACALL DELAY SETB P1.1 REP: MOV C,P1.0 JC REP ;判应答到否,未到则等待 CLR P1.1 RET DELAY4: NOP NOP RET ;读串行E2PROM子程序EEPR EEPR: MOV P1,#0FFH CLR P1.0 ;发开始信号 MOV A,R3 ;送器件地址 ACALL SUBS ;调发送单字节子程序 MOV A,R4 ;送片内字节地址 ACALL SUBS MOV P1,#0FFH CLR P1.0 ;再发开始信号 MOV A,R3 SETB ACC.0 ;发读命令 ACALL SUBS MORE: ACALL SUBS MOV @R1,A INC R1 DJNZ R7,MORE CLR P1.0 ACALL DELAY SETB P1.1 ACALL DELAY SETB P1.0 ;送停止信号 RET SUBR: MOV R0,#08H ;接受单字节子程序 LOOP9: SETB P1.1 ACALL DELAY MOV C,P1.0 RLC A CLR P1.1 ACALL DELAY DJNZ R0,LOOP9 CJNE R7,#01H,LW SETB P1.0 ;若是最后一个字节置A=1 AJMP SETOK LW: CLR P1.0 ;否则置A=0 SETOK: ACALL DELAY SETB P1.1 ACALL DELAY CLR P1.1 ACALL DELAY SETB P1.0 ;应答毕,SDA置1 RET LP1: MOV TF0,#0AH SADS.ASM(385): error A48: DATA-ADDRESS EXPECTED LP2: JNB TF0,LP2 MOV TH0,#3CH ;重置计数初值 MOV TL0,#0B0H CLR TF0 DJNZ TF0,LP2 SADS.ASM(390): error A48: DATA-ADDRESS EXPECTED CPL P1.0 ;输出取反 AJMP LP1 ;重复循环 END Build target 'Target 1' assembling SADS.ASM... SADS.ASM(59): error A40: INVALID REGISTER SADS.ASM(385): error A48: DATA-ADDRESS EXPECTED SADS.ASM(390): error A48: DATA-ADDRESS EXPECTED Target not created |
|
相关推荐
1个回答
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
522 浏览 0 评论
656 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
978 浏览 0 评论
1042 浏览 2 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
735 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12044 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 11:19 , Processed in 0.653795 second(s), Total 68, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号