山大单片机.docx
- 文档编号:11081298
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:14
- 大小:22.32KB
山大单片机.docx
《山大单片机.docx》由会员分享,可在线阅读,更多相关《山大单片机.docx(14页珍藏版)》请在冰点文库上搜索。
山大单片机
2011年
一、试将下面的STC12C5A60S2单片机的C语言程序转换为实现同样功能的汇编语言程序。
(15分)
#include"stc12.h"
unsignedchari;
voidmain(void)
{
TMOD=0x01;
TL0=0x58;
TH0=0x9E;
i=20;
ET0=1;
EA=1;
TR0=1;
while
(1);
}
voidT0_ISR(void)interrupt1
{
TL0=0x58;
TH0=0x9E;
i--;
switch(i)
{
case15:
P2=0x15;
break;
case10:
P2=0x10;
break;
case5:
P2=0x5;
break;
default:
P2=0xff;
break;
}
二、设计一个故障检测系统。
当系统的各部分工作正常时,4个故障源输入端全为低电平,对应故障源的故障指示灯全熄灭。
当某部分出现故障时,则对应的输入信号线由低电平变为高电平,对应故障源的故障指示灯闪烁(闪烁周期定为1秒钟,亮0.5秒,灭0.5秒)。
试设计单片机故障源判定系统,画出电路示意图并编制实现程序(假设单片机外接12MHz的晶体)。
(15分)
三、使用定时器T0,在P2.1引脚上输出脉冲宽度1ms,信号周期4ms的脉冲序列,输出500个脉冲后停止。
(假设晶振频率为12MHz,P2.1平常输出为高电平)(10分)
四、利用STC12C5A60S2单片机设计应答方式的多机通信程序。
通讯参数:
晶振为11.0592MHz,9600,n,8,1。
通讯过程如下:
主机先向从机发送一帧地址信息,然后将内存单元中的10个数据发送给从机,并将数据块校验值(将各个数据进行异或,取最后的异或值作为校验值)发给从机。
从机接收数据并进行数据块的校验,若校验正确,则从机发送00H给主机,否则发送0FFH给主机,主机重新发送数据。
(在适当的地方加程序注释)。
(25分)
五、ADS78752与STC12C5A60S2单片机的接口电路如图所示。
利用中断方式进行模拟量的检测,每检测100个数据求取它们的平均值。
模拟量信号由ADS7852的通道0输入。
编写实现程序。
(25分)
六、简述STC12C5A60S2单片机的特点,并阐述“单片机原理及应用”课程的心得体会。
(10分)
一、15分
设置堆栈指针2分,初始化5分,中断服务程序8分
$INCLUDE (STC12C5A.INC) ;包含STC12C5A60S2寄存器定义文件
ORG 0000H
LJMP MAIN ;转主程序
ORG 000BH ;T0中断服务程序入口地址
LJMP T0_ISR
ORG 0100H
MAIN:
MOV SP,#60H ;设置堆栈指针
MOV TMOD,#01H ;T0初始化
MOV TL0,#58H
MOV TH0,#9EH
MOV A,#20 ;累加器A置20
SETB TR0 ;启动T0计数
SETB ET0 ;允外T0中断
SETB EA ;CPU开中断
SJMP $ ;等待
T0_ISR:
MOV TL0,#58H
MOV TH0,#9EH ;重新装入时间常数
DEC A ;累加器A内容减1
CJNE A,#15H,NEXT1
MOV P2,#15H
LJMP EXIT
NEXT1:
CJNE A,#10H,NEXT2
MOV P2,#10H
LJMP EXIT
NEXT2:
CJNE A,#5H,NEXT3
MOV P2,#5H
LJMP EXIT
NEXT3:
MOV P2,#0XFF
EXIT:
RETI
END
二、中断6分,时间5分,电路4分
T0定时时间为50ms,T0初值65536-50000=15536=3cb0H
#include“stc12c5a.h” //包含STC12C5A60S2单片机的寄存器定义文件
sbit P20=P2^0; //定义相关的位
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
unsignedcharnum=0;
voidmain(void)
{
TMOD=0X01;
TH=0X3C;
TL=0Xb0; //初值
ET0=1; //使能定时器
IT0=1; //外部中断0为边沿触发方式
EX0=1; //允许外部中断0
EA=1; //允许总的中断
P2=0xaa; //灯全灭
while
(1);
}
voidINT0_ISR(void)interrupt0 //外部中断函数
{
TR0=1; //开启定时器
}
voidT0_ISR(void)interrupt1 //定时器T0中断函数
{
TL0=0x3c; //重新装入时间常数
TH0=0xb0;
num++; //计数变量加1
if(num==10)
{
if(P20==1)
P21=~P21;
if(P22==1)
P23=~P23;
if(P24==1)
P25=~P25;
if(P26==1)
P27=~P27;
}
}
三:
时间常数3分,初始化2,中断服务程序5分
#include"stc12c5a.h" //包含STC12C5A60S2的寄存器定义文件
sbitP21=P2^1; //声明P2.1的位变量
unsignedint num=0; //脉冲个数统计
unsignedcharnum_ms=0; //时间统计
voidmain(void)
{
TMOD=0x01;
TL0=0xfc;
TH0=0x18;
TR0=1; //启动T0计数
ET0=1; //允许T0中断
EA=1; //开放总的中断
while
(1); //等待中断
}
voidT0_ISR(void)interrupt1 //定时器T0中断函数
{
TL0=0xfc; //重新装入时间常数
TH0=0x18;
num_ms++; //计数变量加1
if(num_ms==1)
{ //若减到0,则将P2.0取反
P21=0;
}
If(num_ms==4)
{
P21=1;
num_ms=0;
num++;
if(num==500)
TR0=1;
}
}
四、主机10分,从机15分
主机
#include"stc12c5a.h" //包含STC12C5A60S2单片机寄存器定义文件
unsignedcharxdataADDRT[10]; //保存数据的外部RAM单元
unsignedcharSLAVE; //保存从机地址号的变量
unsignedcharrdata;
unsignedcharnum=0,*mypdata;
voidmain(void)
{
SCON=0xd0; //方式3,允许接收
TMOD=0x20; //T1方式2,自动重置初值
TH1=0xFD;
TL1=0Xfd; //装入初值
mypdata=ADDRT;
SLAVE=5; //定义从机地址,在此假设从机地址为5
TR1=1;
ES=1;
EA=1;
TB8=1; //地址标志
SBUF=SLAVE; //发送从机地址
ACC=0; //为和校验做准备
while
(1); //等待中断
}
voidSerial_ISR(void)interrupt4
{
if(TI)
{
TI=0;
TB8=0; //数据标志
ACC=ACC^(*mypdata);
SBUF=*mypdata; //发送数据
mypdata++; //修改指针
num++;
if(num==10)
SBUF=ACC;
}
else //接收处理
{
TI=0;
rdata=SBUF;
if(rdata==0)ES=0; //正常完成
else
{
mypdata=ADDRT;
num=0;
ACC=*mypdata;
TB8=0;
SBUF=*mypdata; //发送数据
mypdata++; //修改指针
num++;
}
}
}
从机参考程序
#include"stc12c5a.h" //包含STC12C5A60S2单片机寄存器定义文件
unsignedcharxdataADDRR[10];
unsignedcharSLAVE,rdata,*mypdata;
unsignedcharnum=0;
voidmain(void)
{
SCON=0xF0;
TMOD=0x20;
TH1=0Xfd;
TL1=0xFD;
mypdata=ADDRR;
SLAVE=5; //设定从机地址
TR1=1;
ES=1;
EA=1;
ACC=0;
while
(1); //等待中断
}
voidSerial_ISR(void)interrupt4
{
RI=0;
rdata=SBUF; //将接收缓冲区的数据保存到rdata变量中
if(RB8) //RB8=1说明收到的信息是地址
{
if(rdata==SLAVE) //如果地址相等,则SM2=0
SM2=0;
}
else //接收到的信息是数据
{
*mypdata=rdata;
ACC=ACC^(*mypdata);
mypdata++;
num++;
if(num==10)
{
if(rdata==ACC)//所有数据接收正确,令SM2=1,为下次接收地址信息准备
{
SBUF=0X00;
SM2=1;
}
else SBUF=0XFF; //主机从新发送
}
}
}
五:
初始化5分,中断15分,平均值5分,
#include"stc12c5a.h"
sbitA0=P1^5;
sbitA1=P1^6;
sbitA2=P1^7;
intadave=0;
intaddata=0;
unsignedcharnum=0;
unsignedcharlowdata;
intsum=0;//累加
voidmain(void)
{
char*ads7852;
ads7852=0x7fff;
TMOD=0X02;
TH0=254;
WAKE_CLKO=WAKE_CLKO|0X01;
IT0=1;//下降边沿触发
TR0=1;
EX0=1;
A0=1;
A1=0;
A2=0;//通道选择
EA=1;//开中断
*ads7852=0x00;//开启AD
While
(1);
}
voidINT0_ISR(void)interrupt0 //外部中断函数
{
lowdata=*ads7852;//低八位
addata=P1&0X0f;
addata=addata<<8;
addata=addata+lowdata;
sum=sum+addata;
addata=0;
num++;
if(num==100)
{
num=0;
sum=sum/100;
adave=sum; //均值
}}六、根据表达进行评判
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机