单片机自检实验文档格式.docx
- 文档编号:20446731
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:17
- 大小:18.05KB
单片机自检实验文档格式.docx
《单片机自检实验文档格式.docx》由会员分享,可在线阅读,更多相关《单片机自检实验文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
AJMPLP1//没有溢出则继续查询
LP2:
INCR1//1s计数值+1
CJNER1,#20,LP1//没有达到1s则继续等待
MOVR1,#0//恢复初值
INCR0//若已到达1s,则显示值+1
CJNER0,#10,MAIN1//是否已显示10次?
走马灯自检
MOVP2,#0//关闭数码管
SETBP2.4//开LED显示
MOVR0,#0FEH//LED显示编码
MOVR1,#0//走马灯循环计数初始化
ZOUMA:
MOVP0,R0
MOVA,R0
RLA
MOVR0,A//走马灯右移
INCR1
MOVR4,#255
ACALLADELAY//延时一段时间
CJNER1,#8,ZOUMA
串行口自检
MAIN2:
MOVTMOD,#20H//设置计时器T1工作方式2
MOVSCON,#50H//设置为串行端口方式1,允许接收
MOVTH1,#0E8H//计数重装值
MOVTL1,#0E8H//计数器初值
SETBTR1//启动计时器T1
LP3:
MOVA,#55H//装入数据
MOVSBUF,A//发送数据
JNBTI,$//等待发送成功
CLRTI//软件清0
MOVR4,#2
JNBRI,ERRL//接收超时,转入错误提示
CLRRI//软件清0
MOVA,SBUF//读数据
CJNEA,#55H,ERRL//判断接收到的数据是否与发送的一致,不一致则跳转至错误提示
AJMPMAIN3//若结果正确,则跳转至AD检测
ERRL:
MOVDPTR,#ERR//LED显示表表头,以下用于显示错误信息
MOVP2,#0
MOVA,#0
MOVCA,@A+DPTR
MOVP0,A
SETBP2.0
MOVR4,#5
CLRP2.0
MOVA,#1
SETBP2.1
CLRP2.1
MOVA,#2
MOVCA,@A+DPTR
SETBP2.2
CLRP2.2
MOVA,#3
SETBP2.3
CLRP2.3
AJMPLP3
AD自检
MAIN3:
MOVTMOD,#11H//设置定时器工作方式
MOVTCON,#05H//设置为边沿触发
MOVIE,#8DH//开启计时器1、外部中断0、外部中断1的中断
MOVP3,#0FH
SETBRS0
USING1
MOVR0,#0
USING0
MOVR1,#0//50Ms循环计数初始化,累积两次为100ms
SETBTR0//启动定时器0
若没有到达100ms,则显示采样值。
MAIN4:
JBCTF0,ADC
LED:
CLRP2.3//关闭第三个LED数码管端口
MOVA,R5//读百位
SETBP2.1//打开第一个LED数码管端口
ACALLDALAY//延时
CLRP2.1//关闭第一个LED数码管端口
MOVA,R6//读十位
ACALLDALAY
CLRP2.2
MOVA,R7//读个位
ACALLDALAY
AJMPMAIN4
检测是否100ms到达,若是则调用AD采样,并转换为BCD码
ADC:
MOVTH0,#4CH//重新装人计数值
INCR1//50ms循环计数+1
CJNER1,#2,LED//50ms是否已经两次?
MOVR1,#0//以下用于BCD码转换
ACALLADP
MOVA,R2
MOVB,#100
DIVAB
MOVR5,A
MOVA,B
MOVB,#10
MOVR6,A
MOVR7,B
AJMPLED
TLC549AD转换子函数
端口:
P1.2:
CLKP1.3:
DATAOUTP1.4:
CS
ADP:
CLRP1.4//CS置低,启动数据传输
MOVR0,#00//循环次数初始化
NOP//延时等待确认CS变化
NOP
NXT:
SETBP1.2//置CLK高
MOVC,P1.3//读取DATAOUT的一位数据
RLCA//装入A累加器暂存,并右移
CLRP1.2//置CLK低
INCR0//循环计数+1
CJNER0,#8,NXT//一个字节的数据需要循环读取8次位数据
SETBP1.4//CS置高,进行下一次采样
MOVR2,A//存储采样值
RET
延时10ms子函数
DALAY:
MOVR4,#20//延时10ms
ADELAY:
MOVR3,#250
DJNZR3,$
DJNZR4,ADELAY
外部中断0
OINT0:
NOP
OINT1:
//ACALLDALAY//延时消抖
MOVA,P3
CJNEA,#0FH,LP4
AJMPLP5
LP4:
MOVTH1,#4CH//50ms定时的初值
MOVTL1,#00H
SETBTR1//启动定时器0
SETBP2.5//发声
LP5:
RETI
计时器1中断
TINT1:
INCR0
CJNER0,#10,LP6
CLRTR1
CLRP2.5
LP6:
RETI
数码管显示表
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
ERR:
DB86H,0AFH,0AFH,0F9H
END
#include<
reg51.h>
intrins.h>
sbitP33=P3^3;
sbitP32=P3^2;
sbitP20=P2^0;
sbitP21=P2^1;
sbitP22=P2^2;
sbitP23=P2^3;
sbitP25=P2^5;
sbitCLK=P1^2;
sbitD0=P1^3;
sbitCS=P1^4;
chara,c,d,f;
charg=20;
inth=0;
unsignedintb,e;
unsignedchartable[]={0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98,0x86,0xAF,0xAF,0xF9};
/***子函数****/
voiddelay(unsignedinttime)
{
unsignedintj=0;
for(;
time>
0;
time--)
for(j=0;
j<
125;
j++);
}
voidxianshi(x)
P0=table[x/1000%10];
P20=1;
delay(3);
P20=0;
P0=table[x/100%10];
P21=1;
P21=0;
P0=table[x/10%10];
P22=1;
P22=0;
P0=table[x%10];
P23=1;
P23=0;
charjianpan()
{
P3=0x0F;
if(P32==0||P33==0)
delay(20);
{
return1;
}
return0;
unsignedchartlc549()
unsignedchary,i;
D0=1;
CS=1;
CLK=1;
CS=0;
_nop_();
for(i=0;
i<
8;
i++)
{
y<
<
=1;
if(D0==1)y=y|0x01;
CLK=1;
_nop_();
CLK=0;
for(i=10;
i>
i--);
CS=1;
returny;
voidxianshiad(x)
P0=table[x/100%10];
P20=1;
delay(5);
P20=0;
P0=table[x/10%10];
P21=1;
P21=0;
P0=table[x%10];
P22=1;
P22=0;
/*****主函数*******/
voidmain()
/****流水灯********/
P2=0x10;
P0=0xFE;
for(a=8;
a>
a--)
delay(500);
P0=_crol_(P0,1);
/******数码管*******/
b=0;
c=1;
d=0;
P0=0x00;
P2=0x00;
TMOD=0x01;
TH0=(55536/256);
TL0=(55536%256);
EA=1;
ET0=1;
TR0=1;
while(c)
xianshi(b);
/*******串口*********/
f=1;
TR0=0;
TMOD=0x21;
TH1=0xF3;
TL1=0xF3;
TR1=1;
SCON=0x50;
PCON=0x00;
SBUF=255;
delay(1000);
e=SBUF;
if(e==255)
TR0=1;
while(f)
{
xianshi(e);
}
else
P0=table[10];
P20=1;
delay(3);
P20=0;
P0=table[11];
P21=1;
P21=0;
P0=table[12];
P22=1;
P22=0;
P0=table[13];
P23=1;
P23=0;
/********ad***********/
EX0=1;
EX1=1;
ET0=0;
//T0定时方式1
TL0=(55536%256);
tlc549();
delay(10);
while
(1)
xianshiad(h);
/****中断函数******/
voidtime0()interrupt1
if(c)
d++;
if(d==50)
d=0;
b=b+1111;
if(b==11110)
c=0;
if(!
c)
if(d==100)
f=0;
f)
g--;
if(g==0)
g=20;
h=tlc549();
_nop_();
if(jianpan())
if(jianpan())
{
P25=1;
delay(500);
P25=0;
}
voidwai0()interrupt0
if(jianpan())
voidwai1()interrupt2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 自检 实验