1. 用硬件定时器编写程序,设置时、分、秒定时器,分别对应的地址为:4000H、4002H、4004H,晶振频率为12MHZ(用8096编写)
2.C08__2 MODULE MAIN
$INCLUDE(8096.INT)
PORT EQU OFFA8H ; 74LS273(U4)端口地址
SOFT__INT EQU 400AH ; 软件定时器中断向量地址
RSEG AT 1CH
AX:DSW 1
AL EQU AX:BYTE
BX:DSW 1
BL EQU BX:BYTE
CX:DSW 1
CL EQU CX:BYTE
DX:DSW 1
DL EQU DX:BYTE
CSEG AT 2080H
LJMP START
CSEG AT 4100H
START:DI
LD SP,#00C0H
LD AX,#HSOINT 设置软件定时器中断向量
ST AX,SOFT__INT
LDB AL,#03H 点亮L1,L2两个发光二极管
STB AL,PORT
LDB BL,#00H 置计数器BL,CL初值为0
LDB CL,#00H
LDB DL,#00H
CLRB INT__PENDING
ORB INT__MASK,#20H 置软件定时器中断相应的中断
屏蔽位为一
LDB HSO__COMMAND,#38H 使软件定时器ST0在250ms中断
ADD HSO__TIME,TIMER1,#0FA00H
LDB HSO__COMMAND,#3AH 使软件定时器ST2在125ms后中断
ADD HSO__TIME,TIMER1,#07D00H
EI
LOOP: SJMP LOOP
HSOINT:DI
LDB CL,IOS1
JBS CL,0,STIMER0 ISO1的第0位为1,STO中断
STMER0
JBS CL,2,STIMER2 ISO1的第2位为1,ST2中断
STMER2
BR RETURN
STIMER0:INCB BL 软件定时器ST0中断处理
CMPB BL,#04H 每中断4次,改变74LS273的第0位一次
JNE ST0SET
XORB AL,#01H
STB AL,PORT
CLRB BL
ST0SET:LDB HSO__COMMAND,#38H 重新使软件定时器ST0在250ms后中断
ADD HSO__TIME,TIMER1,#0FA00H
SJMP RETURN
STIMER2:INCB DL 软件定时器ST2中断处理
CMPB DL,#04H 每中断4次,改变74LS273的第1位一次
JNE ST2SET
XORB AL,#02H
STB AL,PORT
CLRB DL
ST2SET:LDB HSO__COMMAND,#3AH 重新使软件定时器ST2在125ms中断
ADD HSO__TIME,TIMER1,#07D00H
RETURN:EI
RET
END
将以上程序改为使两个发光二极管每秒依次亮闪一次。
都比较简单,各位帮忙看看
8096已经用得很少了,居然还是汇编
为什么不用ARM或430之类的呢?
STIMER2:INCB DL 软件定时器ST2中断处理
CMPB DL,#04H ;每中断4次,改变74LS273的第1位一次 //这里改成8,然后在后面作点灯操作
JNE ST2SET
XORB AL,#02H
STB AL,PORT
CLRB DL