成 都 电 子 机 械 高 等 专 科 学 校 电 气 与 电 子 工 程 系
T0的初值=216-Fosc/12*t =216-12×106/12×0.01 =55536D=D8F0H
将计算出的初值转化为十六进制送寄存器中。 4.3.2 查表指令
查表指令涉及到程序的查找因此要用专用的指令:MOVC A,A+DPTR和MOV A,A+PC MOVC A,A+DPTR指令,DPTR作为基址寄存器时,其值为16位而且可根据需要设计,故可用于在64KROM范围内查表。编写查表程序时,首先把表的首址送入DPTR中,再将要查找的数据序号(或下表值)送入A中,然后就可以使用该指令进行查表操作,并将结果送累加器A中。
MOVC A,A+PC指令,PC作为基址寄存器时,其值由指令的位置确定,它只能设在查表指令操作码下的256个字节范围内。编写查表程序时,首先把查表数据的序号送入A中,再把从查表指令到表的首地址间的偏移量与A值相加,然后使用该指令进行查表操作,并把结果送累加器A中。
4.3.3 程序:
T0CNT EQU 30H ;T0基本单元 BW EQU 24H ;60℃的存储单元 DISP_FLG EQU 41H ;刷新显示标志 2AH, 2BH 2CH ;温度设定暂存器 程序入口
ORG 0000H
LJMP MAIN ;跳转到主程序 T0中断入口
ORG 000BH LJMP ITOP 主程序
29
成 都 电 子 机 械 高 等 专 科 学 校 电 气 与 电 子 工 程 系
ORG 0025H
MIAN: MOV SP,#60H ;设置堆栈指针 TEMP #0AFH ;设定最高温度 MOV R1, #40H ;温度采集存储单元
MOV TMOD , #01H ;设置T0为16位定时方式
MOV 34H, #40H MOV TH0, #0D8H MOV TL0, #0F0H
MOV T0CN1, A MOV IE, #82H CLR A SETB TR0 LOOP: LCALL DELAY LCALL DISPLAY LOOP1: MOVX @R0 ,A SJMP LOOP
T0中断处理程序:
IT0P: PUSH PSW PUSH ACC
MOV TH0, #0D8H MOV TL0 , #0F0H
CLR SPK MOV SISP_FLAG. , #00H INC T0CNT MOV #100, IT0END MOV DISP_FLAG MOV 2AH, 30H 30
;置T0初值 ;T0中断次数请0 ;T0中断允许 ;显示单元情0 ;启动T0
;延时以保证转换结束 ;送显示 ;启动IN0转换 ;主程序结束 ;保护现场 ;重装初值 ;关闭蜂鸣器
;清除温度刷新标志 ;定时中断次数加1 ;中断时间未到,返回 ;设置时间新标志 ;送T到设定温度
;设定数据单元指针 成 都 电 子 机 械 高 等 专 科 学 校 电 气 与 电 子 工 程 系
子程序入口
MOV 2BH, 31H MOV 2CH, 32H MOV A 2CH CLR C
JC A, #24H ;与设定值比较小于转IT0END SETB P3.4 IT0END: POP ACC POP PSW
RETI 数据处理子程序:
DISPLAP :MOV R1 , #50H MOV R2 , #34H MOV A, @R0 MOV B #2
MUL AB MOV R2, A
MOV DPTR ,#TABLELT MOVC A,@A+DPTR
MOV 3AH, A ANL A , #0FH MOV DPTR #TABLELED MOV A, @A+DPTR MOV @R1, A INC R1
MOV A 3AH ANL A , #0F0H MOV DPTR #TABLELED MOV A, @A+DPTR ;开蜂鸣器,发声20ms ;恢复现场 ;定时器中断返回 ;显示单元指针 ;取数据单元指针 ;取采样值 ;查表指针控制 ;将温度表首地址赋给DPTR ;暂存数据值 ;取低四位 ;将七段码表首地址赋给DPTR ;查表取相应的七段码 ;存入显示单元 ;暂存数据值 ;取高四位 ;将七段码表首地址赋给DPTR ;查表取相应的七段码
31
成 都 电 子 机 械 高 等 专 科 学 校 电 气 与 电 子 工 程 系
MOV @R1, A ;存入显示单元 INC R1 INC R2
MOV DPTR ,#TABLELET ;赋DPTR值 MOV A ,R2
MOVC A,@A+DPTR ;查表取数 MOV 3BH, A ANL A , #0FH
MOV DPTR, @A+DPTR ; MOV @R1, A MOV A 3B ANL A , #0F0H
MOV @R1, A MOV A, R0 ADD A #4 MOV R0, A
MOV A, @R0 MOV B #2
MOV PSP #00H RET 延时程序
DELAY : MOV R4 #64H MDL : NOP NOP
MOV A, @A+DPTR MUL AB MOV R2,A
32
;暂存数据值 ;取低四位 取相应的七段码 ;存入显示单元 ;恢复数据 ;取高四位 ;查表取相应的七段码;存入显示单元 ;采样取值 ;差表指针控制
成 都 电 子 机 械 高 等 专 科 学 校 电 气 与 电 子 工 程 系
NOP NOP
DJNZ R4 MDL RET
TABLELED: DB 3FH 06H 5BH 4FH 66H 6DH DB 7DH 07H 7FH 6FH 40H
TABLELT: DB 0A, 50, 0A, 49, 0A, 48, 0A, 47, 0A, 46 DB 0A, 45, 0A, 44, 0A, 43, 0A, 42, 0A, 41 DB 0A, 40, 0A, 39, 0A, 38, 0A, 37, 0A, 36 DB 0A, 35, 0A, 34, 0A, 33, 0A, 32, 0A, 31 DB 0A, 30, 0A, 29, 0A, 28, 0A, 27, 0A, 26 DB 0A, 25, 0A, 24, 0A, 23, 0A, 22, 0A, 21 DB 0A, 20, 0A, 19, 0A, 18, 0A, 17, 0A, 16 DB 0A, 15, 0A, 14, 0A, 13, 0A, 12, 0A, 11 DB 0A, 10, 0A, 09, 0A, 08, 0A, 07, 0A, 06 DB 0A, 05, 0A, 04, 0A, 03, 0A, 02, 0A, 01 DB 0C, 01, 0C, 02, 0C, 03, 0C, 04, 0C, 05 DB 0C, 06, 0C, 07, 0C, 08, 0C, 09, 0C, 10 DB 0C, 11, 0C, 12, 0C, 13, 0C, 14, 0C, 15 DB 0C, 16, 0C, 17, 0C, 18, 0C, 19, 0C, 20 DB 0C, 21, 0C, 22, 0C, 23, 0C, 24, 0C, 25 DB 0C, 26, 0C, 27, 0C, 28, 0C, 29, 0C, 30 DB 0C, 31, 0C, 32, 0C, 33, 0C, 34, 0C, 35 DB 0C, 36, 0C, 37, 0C, 38, 0C, 39, 0C, 40 DB 0C, 41, 0C, 42, 0C, 43, 0C, 44, 0C, 45 DB 0C, 46, 0C, 47, 0C, 48, 0C, 49, 0C, 50 DB 0C, 51, 0C, 52, 0C, 53, 0C, 54, 0C, 55 DB 0C, 56, 0C, 57, 0C, 58, 0C, 59, 0C, 60 DB 0C, 61, 0C, 62, 0C, 63, 0C, 64, 0C, 65
33