利用串行口扩展并口

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

附页:

实验线路图:

编译程序:

源程序代码:

1 汇编语言程序清单

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP INTT0

MAIN:

MOV SP,#60H

MOV TMOD,#01H

SETB ET0

SETB EA

MOV TH0,#3CH

MOV TL0,#0B0H

SETB TR0

MOV 30H, #0 ; 每中断一次加1

MOV 31H, #0 ; 每秒加1, 当其值为100时清0 MOV 32H, #0 ; 个位

MOV 33H, #0 ; 十位

LP:

MOV R0,#32H

MOV R7,#2

ACALL BINBCD

MOV DPTR,#TAB

DSPLY:

MOV A,@R0

MOVC A,@A+DPTR

CPL A

MOV SBUF,A

DSP1:

JNB TI,DSP1

CLR TI

INC R0

DJNZ R7,DSPLY

LP1:

MOV A,30H

CJNE A, #10, LP1

MOV 30H,#00H

INC 31H

MOV A,31H

CJNE A,#100,LP

MOV 31H,#0

SJMP LP

INTT0:

MOV TL0,#0B0H

MOV TH0,#3CH

INC 30H

RETI

TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

DB 0FFH,00H,73H

; 入口参数二进制数存放在31H中

; 出口参数 BCD数十位(33H), 个位(32H)

BINBCD:

MOV A,31H

MOV B,#10

DIV AB

MOV 33H,A

MOV A,B

MOV 32H,A

RET

END ; 程序结束

2 C 语言程序清单

#include

#include

#define uchar unsigned char

#define uint unsigned int

//共阴数码管段码:0~9,全亮,全灭,P

uchar

tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xFF,0x00,0x 73};

uchar timer; //定时器每中断1次加1

void main(void)

{

uchar ten,one,count;

SP=0x60;

TMOD=0x01; //定时器T0方式1定时

ET0=1; //开定时器T0中断

EA=1; //开总中断

TH0=0x3C; //每100ms中断一次

TL0=0xB0;

TR0=1; //启动定时器T0

timer=0;

count=0;

do{

do{

ten=count/10; //求得十位

one=count%10; //求得个位

SBUF=~tab[one]; //发送个位

while(~TI);

TI=0;

SBUF=~tab[ten]; //发送十位

while(~TI);

TI=0;

while(timer<10); //延时1s,即10*100ms timer=0;

count++; //每隔一秒,count值加1 }while(count<100); //从0计到99

count=0;

} while(1);

}

void intt0() interrupt 1

{

TH0=0x3C;

TL0=0xB0;

timer++;

}

相关文档
最新文档