您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 石家庄铁道大学单片机实验
石家庄铁道大学单片机实验题目实验一数据区赋值(用指针、at、宏分别设计程序)实现给片内RAM30H和片外RAM3000H开始的16字节区域分别赋值为0x01、0x02......0x0f。At#includeabsacc.h//atdataunsignedcharbuffer1[16]_at_0x30;xdataunsignedcharbuffer2[16]_at_0x0030;voidmain(){unsignedinti,j;for(i=0;i16;i++){buffer1[i]=i;}for(j=0;j16;j++){buffer2[j]=j;}while(1);}宏#includeabsacc.h//宏voidmain(){unsignedinti,a,b;a=0x30;b=0x0030;for(i=0;i16;i++){DBYTE[a++]=i;XBYTE[b++]=i;}while(1);}指针#includeabsacc.h//指针voidmain(void){unsignedchardata*p1;unsignedcharxdata*p2;unsignedinti;p1=0x30;p2=0x3000;for(i=0;i16;i++){*p1=i;p1++;*p2=i;p2++;}}实验二数据区数据处理对30H开始的内存区数据0x01~0x0f进行处理:将30H开始的内容变成0x01、0x23、0x45......0xef存到40H开始的单元将40H开始的内容变成0xef、0xcd.....0x23、0x01存到50H开始的单元将50H开始的内容变成0x0f、0x0e、0x0d......0x01、0x00存到60H开始的单元#includestdio.h#includemath.h#includeadsacc.hdataunsignedcharbuffer1[16]_at_0x30;dataunsignedcharbuffer2[8]_at_0x40;dataunsignedcharbuffer3[8]_at_0x50;dataunsignedcharbuffer4[16]_at_0x60;voidmain(){unsignedinti,j,k,r;for(i=0;i16;i++){buffer1[i]=i;}//30H赋值for(j=0;j8;j++){buffer2[j]=buffer1[2*j]4|buffer1[2*j+1];}//40Hfor(k=0;k8;k++){buffer3[k]=buffer2[7-k];}//50Hfor(r=1;r16;r++){if(r%2==0)buffer4[r-1]=buffer3[r/2-1]4;elsebuffer4[r-1]=buffer3[r/2]&0x0f;}//60H}实验三并行口实验P3.0接开关K0,设计程序实现:当K0=0时,P1口连接的8个LED灯从LED0~LED7依次点亮;当K0=1时,P1口连接的8个LED灯从LED7~LED0依次点亮;#includereg51.h#defineuncharunsignedcharvoiddelay(){unchari,j;for(i=0;i255;i++)for(j=0;j255;j++);}voidmian(){unchara,b,i;do{P3=0xff;//将P3置为输入状态a=P3;a=a&0x01;//屏蔽高7位if(a==0){b=0x01;for(i=0;i8;i++){P1=b;delay();b=b1;}}else{b=0x80;for(i=0;i8;i++){P1=b;delay();b=b1;}}}while(1);}根据P3.1和P3.0连接的开关K1和K0的状态实现P1口连接的8只LED灯按以下形式亮灭:K1K0亮灯008只灯全亮全灭交替01LED7~4和LED3~0交替全亮全灭10从全灭状态起,8只灯从两头到中间再从中间到两头依次点亮11从全亮状态起,8只灯从两头到中间依次点灭,再从中间到两头依次点亮#includereg51.h#defineuncharunsignedcharvoiddelay(){unchari,j;for(i=0;i255;i++)for(j=0;j255;j++);}voidmian(){unchara,b,c,i;do{P3=0xff;a=P3;a=a&0x03;//屏蔽高六位switch(a){case0:{for(i=0;i2;i++){P1=0x00;delay();P1=0x0ff;delay();}}break;case1:{for(i=0;i2;i++){P1=0x0f;delay();P1=0x0f0;delay();}}break;case2:{P1=0x00;for(i=0;i4;i++){b=(0x01i)&0x0f;c=(0x80i)&0xf0;P1=b+c;delay();}for(i=0;i4;i++){b=(0x08i)&0x0f;c=(0x10i)&0xf0;P1=b+c;delay();}}break;case3:{P1=0xff;for(i=0;i4;i++){b=(~(0x01i))&0x0f;c=(~(0x80i))&0xf0;P1=b+c;delay();}for(i=0;i4;i++){b=(~(0x08i))&0x0f;c=(~(0x10i))&0xf0;P1=b+c;delay();}}break;}//switch结束}while(1);}实验四外部中断实验1INT0中断:P1接8个LED灯,点动开关接P3.2(INT0),负跳变产生中断,编写程序实现:主程序8只LED灯一起亮灭闪烁循环往复;INT0中断程序实现8个LED灯左右点亮循环5次后退出中断。#includereg51.h#includeintrins.h#defineuncharunsignedcharvoiddelay(){unchari,j;for(i=0;i255;i++)for(j=0;j255;j++);}voidmain(){EA=1;EX0=1;IT0=1;do{P1=0x00;delay();P1=0xff;delay();}while(1);}voidint0()interrupt0using1{unchark,m;k=0x80;for(m=0;m40;m++)//左点亮循环5次{P1=k;delay();k=_cror_(k,1);}}INT1中断:P1接8个LED灯,点动开关接P3.2(INT0),负跳变产生中断,编写程序实现:主程序8只LED灯一起亮灭闪烁循环往复;INT0中断程序实现8个LED灯左右点亮循环5次后退出中断。#includereg51.h#includeintrins.h#defineuncharunsignedcharvoiddelay(){unchari,j;for(i=0;i255;i++)for(j=0;j255;j++);}voidmain(){EA=1;EX1=1;IT1=1;do{P1=0x00;delay();P1=0xff;delay();}while(1);}voidint1()interrupt2using2{unchara,b,c;EX1=0;a=0x80;for(b=0;b5;b++)//左右点亮循环5次{for(c=0;c8;c++){P1=0x80c;delay();}for(c=0;c8;c++){P1=0x01c;delay();}}}实验五外部中断实验2:(中断优先级和中断嵌套实验)两个外部中断:P1接8个LED灯,点动开关接P3.2(INT0),K0开关接P3.3(INT1),均为负跳变产生中断和低优先级,编写程序实现如下功能:①主程序8只LED灯一起亮灭闪烁循环往复。②INT0中断程序实现:8个LED灯左点亮循环5次后退出中断;INT1中断程序实现8个LED灯右点亮循环5次后退出中断。(为方便实验现象观察,中断程序里的循环次数可改为10次)运行程序,观察在INT0中断服务期间,INT1申请中断是否会响应?(不会)在INT1中断期间,INT0申请中断是否会响应?(不会)解释实验现象理解同优先级下的中断优先顺序的知识。(自然优先级INT0INT1,但进入中断后互不干扰;自然优先级下若同时触发INT0和INT1,则先响应INT0)修改程序,INT0设为低优先级,INT1设为高优先级,运行程序观察实验现象:在INT0中断程序运行中,INT1中断请求能否得到相应?(可以)在INT1中断程序运行中,INT0中断请求能否得到相应?(不可以)修改程序,INT0设为高优先级,INT1设为低优先级,运行程序观察实验现象:在INT0中断程序运行中,INT1中断请求能否得到相应?(不可以)在INT1中断程序运行中,INT0中断请求能否得到相应?(可以)解释原因,加强对中断嵌套知识的理解。(若手动设置优先级,(如PX0=1,PX1=0使INT0为高级中断、INT1为低级中断),高级中断可以打断执行中的低级中断)(实验设置目的:体会中断管理机制,理解中断嵌套规则。)#includereg51.h#includeintrins.h#defineuncharunsignedcharvoiddelay(){unchari,j;for(i=0;i255;i++)for(j=0;j255;j++);}voidmain(){EA=1;EX0=1;EX1=1;IT0=1;IT1=1;IP=0;//1.IP=0即PX0=0;PX1=1;同为低优先级//2.PX0=0;PX1=1;//3.PX0=1;PX1=0;do{P1=0x00;delay();P1=0xff;delay();}while(1);}voidint0()interrupt0using1{unchara,b;b=0x80;for(a=0;a40;a++){P1=b;delay();k=_cror_(b,1);}}voidint1()interrupt2using2{unchark,m;k=0x01;for(m=0;m40;m++){P1=k;delay();k=_crol_(k,1);}}实验六定时器实验P1接8个LED灯,点动开关接P3.2(INT0),负跳变产生中断。编写程序实现如下功能:①主程序8只LED灯上电全灭。②INT0中断程序实现:按一次启动定时器T0,再按一次停止。停止后恢复到上电状态。③定时器T0实现:8个LED灯左点亮循环,每个点亮时间为1S。(定时器分别用中断方式和查询方式实现。)定时器初值计算:10000us=216-X*12/6得X=ec78H中断方式:#includereg51.h#includeintrins.hunsignedchara,i=100;voidmain(){TMOD=0x01;TH0=0xec;TL0=0x78;P1=0x00;IT0=1;EX0=1;EA=1;IT0=1;EX0=1;ET0=1;TR0=0;while(1);}voidtemer0()interrupt1{TH0=0xec;TL0=0x78;i--;if(i=0){P1=a;a=_cror_(a,1);i=100;}}voidint0()interrupt0{TR0=~TR0;if(TR0==0)P1=0x00;}查询方式:#includereg51.h#includeintrins.hunsignedchara,i=100;voidmain(){TMOD=0X01;TH0=0Xec;TL0=0X78;P1=0X00;IT0=1;EX0=1;EA=1;IT0=1;EX0=1;TR0=0;while(1){if(TF0
本文标题:石家庄铁道大学单片机实验
链接地址:https://www.777doc.com/doc-4676164 .html