📄 adc0809.txt
字号:
ORG 0000H ;程序执行开始地址
LJMP START ;跳至START执行
ORG 0003H ;外部中断0入口地址
RETI ;中断返回
ORG 000BH ;定时器T0入口地址
RETI ;中断返回
ORG 0013H ;外部中断1入口地址
RETI ;中断返回
ORG 001BH ;定时器T1入口地址
RETI ;中断返回
ORG 0023H ;串行口中断入口地址
RETI ;中断返回
ORG 002BH ;定时器T2入口地址
RETI ;中断返回
CLEARMEMIO: CLR A
MOV P2,A ;P2口置0
MOV R0,#70H ;内存循环清0(70H-7BH)
MOV R2,#0CH
LOOPMEM:MOV @R0,A
INC R0
DJNZ R2,LOOPMEM
MOV A,#0FFH
MOV P0,A ;P0,P1,P3端口置1
MOV P1,A
MOV P3,A
RET ;子程序返回
START: LCALL CLEARMEMIO ;初始化
MAIN: LCALL DISPLAY ;显示数据一次
LCALL TEST
AJMP MAIN ;返回MAIN循环
NOP ;PC值出错处理
NOP ;空操作
NOP ;空操作
LJMP START ;重新复位启动
DISPLAY:MOV R3,#08H ;8路信号循环显示控制
MOV R0,#70H ;显示数据初始值(70H-77H)
MOV 7BH,#00H ;显示通道路数(0-7)
DISLOOP1:MOV A,@R0 ;显示数据转为3位十进制BCD码存入
MOV B,#100 ;7AH,79H,78H显示单元内
DIV AB ;显示数据除100
MOV 7AH,A ;商入7AH
MOV A,#10 ;A放入数10
XCH A,B ;余数与数10交换
DIV AB ;余数除10
MOV 79H,A ;商入79H
MOV 78H,B ;余数入78H
MOV R2,#0FFH ;每路显示时间控制4ms*255
DISOOP2:LCALL DISP ;调4位LED显示程序
DJNZ R2,DISLOOP2 ;每路显示时间控制
INC R0 ;显示下一路
INC 7BH ;通道显示数值加1
DJNZ R3,DISLOOP1 ;8路显示未完转DIS1再循环
RET ;8路显示完子程序结束
DISP: MOV R1,#78H ;赋显示数据单元首地址
MOV R5,#0FEH ;扫描字
PLAY: MOV P1,#0FFH ;关显示
MOV A,R5 ;取扫描字
ANL P3,A ;开显示
MOV A,@R1 ;取显示数据
MOV DPTR,#TAB ;取段码表首地址
MOVC A,@A+DPTR ;查显示数据对应段码
MOV P1,A ;段码放入P1口
LCALL DL1MS ;显示1ms
INC R1 ;指向下一地址
MOV A,P3 ;取P3口扫描字
JNB ACC.3,ENDOUT ;4位显示完转ENDOUT结束
RL A ;扫描字循环左移
MOV R5,A ;扫描字放入R5暂存
MOV P3,#0FFH ;显示暂停
AJMP PLAY ;转PLAY
ENDOUT: MOV P3,#0FFH ;显示结束,端口置1
MOV P1,#0FFH
RET ;子程序返回
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
DL1MS: MOV R6,#14H ;1ms延时程序
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
TEST: CLR A ;清累加器
MOV P2,A ;清P2口
MOV R0,#70H ;转换值存放首地址
MOV R7,#08H ;转换8次控制
LCALL TESTART ;启动测试
WAIT: JB P3.7,MOVD ;等待A/D转换结束信号后转MOVD
AJMP WAIT ;P3.7为0,等待
TESTART:SETB P2.3 ;锁存测试通道地址
NOP ;延时2us
NOP
CLR P2.3 ;测试通道地址锁存完毕
SETB P2.4 ;启动测试,开发脉冲
NOP ;延时2us
NOP
CLR P2.4 ;发启动脉冲完毕
NOP ;延时4us
NOP
NOP
NOP
RET ;子程序调用结束
MOVD: SETB P2.5 ;允许0809输出
MOV A,P0 ;将A/D转换值移入A
MOV @R0,A ;放入内存单元
CLR P2.5 ;关闭0809输出
INC R0 ;内存地址加1
MOV A,P2 ;通道地址移入A
INC A ;通道地址加1
MOV P2,A ;通道地址送0809
CLR C ;清进位标志
CJNE A,#08H,TESTCON ;通道地址不等于8转TESTCONT再调试
JC TESTCON ;通道地址小于8转TESTCONT再调试
CLR A ;大于或等于8,A/D转换结束,恢复端口
MOV P2,A ;P2口置0
MOV A,#0FFH
MOV P0,A ;P0口置0
MOV P1,A ;P1口置0
MOV P3,A ;P3口置0
RET ;取A/D转换数据结束
TESTCON:LCALL TESTART ;再发测试启动脉冲
LJMP WAIT ;跳至WAIT等待A/D转换结束信号
END ;程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -