微机实验 余成驹 光电1202班 U201214134
org 1000h
TAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0E6H,0EEH,3EH,1AH,7AH,9EH,8EH
;------------------------------------ ;- Generated Initialization File -- ;------------------------------------ $include (C8051F310.inc)
public Init_Device
INIT SEGMENT CODE rseg INIT
; Peripheral specific initialization functions, ; Called from the Init_Device label PCA_Init:
anl PCA0MD, #0BFh mov PCA0MD, #000h ret
Timer_Init:
mov CKCON, #002h ret
Port_IO_Init:
; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital
; P1.0 - Unassigned, Push-Pull, Digital ; P1.1 - Unassigned, Push-Pull, Digital ; P1.2 - Unassigned, Push-Pull, Digital ; P1.3 - Unassigned, Push-Pull, Digital ; P1.4 - Unassigned, Push-Pull, Digital ; P1.5 - Unassigned, Push-Pull, Digital ; P1.6 - Unassigned, Push-Pull, Digital ; P1.7 - Unassigned, Push-Pull, Digital ; P2.0 - Unassigned, Open-Drain, Digital
微机实验 余成驹 光电1202班 U201214134
; P2.1 - Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digital
mov P1MDOUT, #0FFh mov P2MDOUT, #0C0h mov XBR1, #040h ret
; Initialization function for device, ; Call Init_Device from your main program Init_Device:
lcall PCA_Init lcall Timer_Init lcall Port_IO_Init ret
END
2 提高部分:
ORG 0000H
LJMP START
ORG 000BH LJMP TI00
ORG 0300H START:
LCALL Init_Device
MOV R3,#00H ;百位数码管赋予初值 MOV R6,#00H MOV R7,#01H MOV 61H,#40H MOV 62H,#80H SETB ET0 SETB EA
;十位数码管赋予初值 ;个位数码管赋予初值
;开外中断T0
MOV 60H,#00H ;设置位控码
MOV TMOD, #01H ;选择定时器T0方式一
微机实验 余成驹 光电1202班 U201214134
MOV TH0, #131 MOV TL0, #99 MAIN:
LJMP DISP ;跳入动态输出子程序 MAIN1:
LCALL COUNTER AJMP MAIN ;重新扫描
;=================动态输出子程序================== DISP:
MOV SP,#30H ;设置堆栈指针 MOV R1,#60H
;位选指针赋初值
MOV P1,#00H ;灯全灭 ;================= LD0:
MOV A,@R1 ;取出位选码
ANL P0,#3FH ;将P0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位)
ORL P0,A ;输出位选信号 MOV A,R7 ;取出段选码 MOV DPTR,#TAB
;DPTR指向段选码表第一个数据
MOVC A,@ A+DPTR ;查表,取出段选码 MOV P1,A ;输出段选码 LCALL DL1MS ;延时1ms,灯亮1ms MOV P1,#00H ;灯全灭
INC R1 ;位选指针加一 MOV A,@R1 ;取出位选码
ANL P0,#3FH ;将P0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位)
ORL P0,A ;输出位选信号 MOV A,R6 ;取出段选码 MOV DPTR,#TAB
;DPTR指向段选码表第一个数据
MOVC A,@ A+DPTR ;查表,取出段选码 MOV P1,A ;输出段选码 LCALL DL1MS ;延时1ms,灯亮1ms
;定时器赋予初值
微机实验 余成驹 光电1202班 U201214134
MOV P1,#00H ;灯全灭 INC R1
MOV A,@R1 ;取出位选码
ANL P0,#3FH ;将P0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位)
ORL P0,A ;输出位选信号 MOV A,R3 ;取出段选码 MOV DPTR,#TAB
;DPTR指向段选码表第一个数据
MOVC A,@ A+DPTR ;查表,取出段选码 MOV P1,A ;输出段选码 LCALL DL1MS ;延时1ms,灯亮1ms MOV P1,#00H ;灯全灭 LJMP MAIN1 ;返回主程序
;===============延时1ms子程序============= ORG 0050H DL1MS: MOV R4,#4 D1: NOP
MOV R5,#253 DJNZ R5,$ DJNZ R4,D1 RET
;延时程序通过R4,R5 实现
ORG 0100H COUNTER: SETB TR0 RET
;中断程序 TI00:
MOV TH0, #133 ;中断程序重新赋予初值 MOV TL0,# 99 INC R7
;个位加一 ;重新将个位归零
CJNE R7,#0BH,S1 ;判断个位是否进位 MOV R7,#01H
CJNE R6,#00H,S2 ;判断此时十位是否显示
;定时器开启
微机实验 余成驹 光电1202班 U201214134
MOV R6,#01H ;若不显示则开启显示 S2:
INC R6
;十位加一
CJNE R6,#0BH,S1 ;判断十位是否进位 CJNE R3,#00H,S3 ;判断百位是否显示 MOV R3,#01H S3:
INC R3
;百位加一 ;十位重新归零
;如果到200则数码管全熄灭 ;踏步停止
MOV R6,#01H MOV P1,#00H SJMP $ S1: RETI
ORG 0200H
;===============段选码表==============;
TAB: DB 00H,0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H;
$include (C8051F310.inc)
public Init_Device
INIT SEGMENT CODE rseg INIT
; Peripheral specific initialization functions, ; Called from the Init_Device label PCA_Init:
anl PCA0MD, #0BFh mov PCA0MD, #000h ret
Timer_Init:
mov CKCON, #002h ret
;中断返回
CJNE R3,#03H,S1 ;判断百位是否到2
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库微机原理实验四 LED数码管显示实验(2)在线全文阅读。
相关推荐: