8155数字钟设计
时间:10-02
整理:3721RD
点击:
已知PORT地址为8000H
PORTA为8001H
PORTB为8002H
PORTC为8003H
DISP0地址为30H 初始化值为00H
AHOUR,MIN,SEC,MESC的地址为3CH~3FH,初始化值为00H
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP CLOCK
ORG 0030H
MAIN: MOV SP,#50H ;设置堆栈区
MOV DPTR,#PORT ; 8155初始化
MOV A,#03H
MOVX @DPTR,A
CLR F1 ;清0闹钟标志位
CLR F0 ;允许计时显示
MOV AHOUR,#0FFH ;闹钟值寄存区初值
MOV AMIN,#0FFH
MOV ASEC,#0FFH
MOV R7,#10H ;显示缓冲区、计时缓冲区清0
MOV R0,#DISP0
CLR A
LOOP: MOV @R0, A
INC R0
DJNZ R7,LOOP
MOV TMOD,#01H ;定时器T0初始化
MOV TL0, #0B0H
MOV TH0, #3CH
SETB TR0 ; 启动定时器0
SETB EA ; 开中断
SETB ET0
BEGIN: ACALL ALARM ;调用定时器比较
ACALL KEYSCAN ;调用键盘扫描
CJNE A,#0AH,NEXT1;是C/R键否?
CLR TR0 ;暂停计时
MOV R1, #HOUR ;地址指针指向计时缓冲区首地址
AJMP MOD
NEXT1: CJNE A,#0BH ,BEGIN;是ALM键否?
JB F1,NEXT2 ;闹钟正在闹响否?
MOV R1,#AHOUR ;地址指针指向闹钟值寄存区首地址
MOD: SETB F0 ;禁止显示计时时间
ACALL MODIFY ;调用时间设置/闹钟定时程序
SETB TR0 ; 重新开始计时
CLR F0 ; 恢复显示计时时间
AJMP BEGIN
NEXT2: SETB P1.0 ;闹钟正在闹响,停闹
CLR F1 ;清0闹钟标志
AJMP BEGIN
不知道8155的初始化、设置堆栈区、标志位、缓冲区用C语言怎么编
/*键盘设置子程序*/
KEYIN: PUSH PSW ;保护现场
PUSH ACC
SETB RS1
MOV R0,#DISP0 ;R0指向显示缓冲区首地址
MOV R7,#60H ;设置键盘输入次数
保护现场用C语言怎么写?