石家庄铁道大学单片机实验

上传人:txadgkn****dgknqu... 文档编号:64169421 上传时间:2022-03-21 格式:DOCX 页数:28 大小:35.98KB
收藏 版权申诉 举报 下载
石家庄铁道大学单片机实验_第1页
第1页 / 共28页
石家庄铁道大学单片机实验_第2页
第2页 / 共28页
石家庄铁道大学单片机实验_第3页
第3页 / 共28页
资源描述:

《石家庄铁道大学单片机实验》由会员分享,可在线阅读,更多相关《石家庄铁道大学单片机实验(28页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上石家庄铁道大学单片机实验题目实验一 数据区赋值(用指针、at、宏分别设计程序)实现给片内RAM 30H和片外RAM 3000H开始的16字节区域分别赋值为0x01、0x02.0x0f。At#include /atdata unsigned char buffer116 _at_ 0x30;xdata unsigned char buffer216 _at_ 0x0030;void main() unsigned int i,j; for(i=0;i16;i+) buffer1i=i; for(j=0;j16;j+) buffer2j=j; while(1);宏#inc

2、lude/宏void main() unsigned int i,a,b; a=0x30; b=0x0030; for(i=0;i16;i+) DBYTEa+=i; XBYTEb+=i; while(1); 指针#include /指针void main(void)unsigned char data*p1;unsigned char xdata*p2;unsigned int i;p1=0x30;p2=0x3000;for(i=0;i16;i+)*p1=i;p1+;*p2=i;p2+; 实验二 数据区数据处理对30H开始的内存区数据0x010x0f进行处理:将30H开始的内容变成0x01、0

3、x23、0x45.0xef存到40H开始的单元将40H开始的内容变成0xef、0xcd.0x23、0x01存到50H开始的单元将50H开始的内容变成0x0f、0x0e、0x0d.0x01、0x00存到60H开始的单元#include#include#includedata unsigned char buffer116 _at_ 0x30;data unsigned char buffer28 _at_ 0x40;data unsigned char buffer38 _at_ 0x50;data unsigned char buffer416 _at_ 0x60;void main()uns

4、igned int i,j,k,r;for(i=0;i16;i+) buffer1i=i;/30H赋值for(j=0;j8;j+) buffer2j=buffer12*j4|buffer12*j+1;/40Hfor(k=0;k8;k+) buffer3k=buffer27-k;/50Hfor(r=1;r4; else buffer4r-1=buffer3r/2&0x0f;/60H实验三 并行口实验P3.0接开关K0,设计程序实现:当K0=0时,P1口连接的8个LED灯从LED0LED7依次点亮;当K0=1时,P1口连接的8个LED灯从LED7LED0依次点亮;#include#define u

5、nchar unsigned charvoid delay() unchar i,j; for(i=0;i255;i+) for(j=0;j255;j+);void mian()unchar a,b,i;doP3=0xff;/将P3置为输入状态a=P3;a=a&0x01;/屏蔽高7位if (a=0) b=0x01; for(i=0;i8;i+) P1=b; delay(); b=b1; elseb=0x80;for(i=0;i1;while(1);根据P3.1和P3.0连接的开关K1和K0的状态实现P1口连接的8只LED灯按以下形式亮灭:K1K0亮灯008只灯全亮全灭交替01LED74和LED

6、30交替全亮全灭10从全灭状态起,8只灯从两头到中间再从中间到两头依次点亮11从全亮状态起,8只灯从两头到中间依次点灭,再从中间到两头依次点亮#include#define unchar unsigned charvoid delay()unchar i,j; for(i=0;i255;i+) for(j=0;j255;j+);void mian()unchar a,b,c,i;doP3=0xff; a=P3; a=a&0x03;/屏蔽高六位 switch(a) case 0: for(i=0;i2;i+) P1=0x00; delay(); P1=0x0ff; delay(); break;

7、 case 1: for(i=0;i2;i+) P1=0x0f; delay(); P1=0x0f0; delay(); break; case 2: P1=0x00; for(i=0;i4;i+) b=(0x01i)&0xf0; P1=b+c; delay(); for(i=0;ii)&0x0f; c=(0x10i)&0xf0; P1=b+c; delay(); break; case 3: P1=0xff; for(i=0;i4;i+) b=(0x01i)&0xf0; P1=b+c; delay(); for(i=0;ii)&0x0f; c=(0x10i)&0xf0; P1=b+c; de

8、lay(); break; /switch结束 while(1);实验四 外部中断实验1INT0中断:P1接8个LED灯,点动开关接P3.2(INT0),负跳变产生中断,编写程序实现:主程序8只LED灯一起亮灭闪烁循环往复;INT0中断程序实现8个LED灯左右点亮循环5次后退出中断。#include #include #define unchar unsigned charvoid delay()unchar i,j;for(i=0;i255;i+)for(j=0;j255;j+);void main()EA=1; EX0=1; IT0=1; doP1=0x00; delay(); P1=0x

9、ff; delay(); while(1);void int0() interrupt 0 using 1 unchar k,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次后退出中断。#include#include#define unchar unsigned charvoid delay()unchar i,j;for(i=0

10、;i255;i+)for(j=0;j255;j+);void main() EA=1; EX1=1; IT1=1; doP1=0x00; delay(); P1=0xff; delay(); while(1);void int1() interrupt 2 using 2 unchar a,b,c; EX1=0; a=0x80; for(b=0;b5;b+) /左右点亮循环5次 for(c=0;cc; delay(); for(c=0;c8;c+) P1=0x01INT1,但进入中断后互不干扰;自然优先级下若同时触发INT0和INT1,则先响应INT0)修改程序,INT0设为低优先级,INT1

11、设为高优先级,运行程序观察实验现象:在INT0中断程序运行中,INT1中断请求能否得到相应?(可以)在INT1中断程序运行中,INT0中断请求能否得到相应? (不可以)修改程序,INT0设为高优先级,INT1设为低优先级,运行程序观察实验现象:在INT0中断程序运行中,INT1中断请求能否得到相应?(不可以)在INT1中断程序运行中,INT0中断请求能否得到相应?(可以) 解释原因,加强对中断嵌套知识的理解。(若手动设置优先级,(如PX0=1,PX1=0使INT0为高级中断、INT1为低级中断),高级中断可以打断执行中的低级中断)(实验设置目的:体会中断管理机制,理解中断嵌套规则。)#incl

12、ude#include#define unchar unsigned charvoid delay()unchar i,j;for(i=0;i255;i+)for(j=0;j255;j+);void main() 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);void int0() interrupt 0 using 1 unchar a,b; b=

13、0x80; for(a=0;a40;a+) P1=b; delay(); k=_cror_(b,1); void int1() interrupt 2 using 2 unchar k,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。(定时器分别用中

14、断方式和查询方式实现。) 定时器初值计算:10000us=216-X*12/6 得X=ec78H中断方式:#include#includeunsigned char a,i=100;void main()TMOD=0x01;TH0=0xec;TL0=0x78;P1=0x00;IT0=1;EX0=1;EA=1;IT0=1;EX0=1;ET0=1;TR0=0;while(1);void temer0() interrupt 1TH0=0xec;TL0=0x78;i-;if(i=0) P1=a; a=_cror_(a,1); i=100; void int0() interrupt 0TR0=TR0

15、;if(TR0=0) P1=0x00;查询方式:#include#includeunsigned char a,i=100;void main()TMOD=0X01;TH0=0Xec;TL0=0X78;P1=0X00;IT0=1;EX0=1;EA=1;IT0=1;EX0=1;TR0=0;while(1)if(TF0)TF0=0?TH0=0Xec;TL0=0X78;i-;if(i=0) P1=a; a=_cror_(a,1); i=100; void int0() interrupt 0TR0=TR0;if(TR0=0) P1=0x00;实验七 定时器计数器综合实验P1接8个LED灯,P3.7接

16、1个LED灯,点动开关接P3.2 (INT0),负跳变产生中断,P3.3 (INT1)用低电平触发中断。编写程序实现如下功能: 主程序9只LED灯上电全灭。 INT0中断程序实现:按一次启动定时器T0,再按一次停止。停止后恢复到上电状态。 INT1中断程序实现:按一次启动定时器T1,再按一次停止。停止后恢复到上电状态。 定时器T0实现:P3.7所接1个LED灯亮灭闪烁,亮灭时间各为1S。 计数器T1实现:记录由T1口所输入脉冲个数(P3.5输入下降沿),以二进制形式在P1口输出。(提示:低电平触发及时恢复高电平,以免中断重入)(计数器输入为T1(P3.5)、T0(P3.4)外部脉冲;定时器为系

17、统时钟12分频,内部脉冲(一个机器周期1us)#include#includeunsigned char i=100;sbit P3_7=P37;void main()TMOD=0X61;/(T1方式2.T0方式1)或2.TMOD=0X51;(T1.T0方式1)TH0=0Xec;TL0=0X78;TH1=0Xff;/或2.TH1=0X00;TL1=0Xff;/或2.TL1=0X00;P1=0X00;P3_7=0;EA=1;IT0=1;EX0=1;IT1=1;EX1=1;ET0=1;ET1=1;TR0=0;TR1=0;while(1);/或2.P1=TL1;void temer0() inter

18、rupt 1TH0=0Xec;TL0=0X78;i-;if(i=0) P3_7=P3_7; i=100;void int0() interrupt 0TR0=TR0;if(TR0=0) P3_7=0;void int1() interrupt 2TR1=TR1;if(TR1=0) P1=0; void temer1() interrupt 3 / 2.TMOD=0X51;删掉该段unsigned char b;TH1=0Xff;TL1=0Xff;b+;P1=b;实验八 双机串行通讯基础实验通信要求:fosc=6M,波特率2400,(提示:通讯双方工作在方式1,定时器1工作在方式2定时模式,计数

19、初值设为:0xf3,SMOD=1。)程序设计内容:要求内部RAM30H开始的16个字节内容用程序实现赋值015。用查询或中断方式实现将甲机内部RAM 30H开始的16个字节的内容发送到已机并存入内部RAM 40H开始的单元中,并同时从P1口输出。为了观察发送过程,要求每发送一个数据使甲机的P1_0连接的指示灯LED0亮灭一次。(亮灭延时时间自定,但要求能明显观察到亮灭状态转换。)温馨提示:在中断处理模式中数据发送和接收完毕后,程序执行while(1);语句,可在此处设置断点运行程序;或者执行一直让P1_0连接的LED0灯常亮的死循环程序;在查询模式下发送和接收完毕后最后执行while(1);语

20、句,可在此处设置断点运行程序;或者执行一直让P1_0连接的LED0灯常亮的死循环程序;)。实验连线:甲机的P1.0分别接LED0,乙机P1接LED0LED7,甲机RXD接乙机TXD,甲机TXD接乙机RXD,两机共地。#include /甲发送(中断)#includedata unsigned char buffer116 _at_ 0x30;unsigned char i,temp=0,j=0;sbit P1_0=P10;void delay()unsigned char m,n;for(m=0;m255;m+)for(n=0;n255;n+);void main() for(i=0;i16;

21、i+) buffer1i=i;P1_0=0;TMOD=0X20;TH1=0xf3;TL1=0xf3;SCON=0X40;PCON=0X80;EA=1;ES=1;TR1=1;SBUF=buffer10; while(1);void serialtrp() interrupt 4TI=0; SBUF=buffer1j; delay(); P1_0=P1_0; j+; if(j=16)j=0; #include /乙接收中断#include #define uchar unsigned charuchar i,j,Hong1=0x40,a=0;void main()TMOD=0x20; TH1=0x

22、f3; TL1= 0xf3; SCON=0x50; PCON=0x80; EA=1; ES=1; TR1=1; P1=0; while(1); void serall0() interrupt 4RI=0;if(a=16) ES=0; while(1); else DBYTEHong1=SBUF; a+; P1=DBYTEHong1; Hong1+; #include /甲发送(查询1)#includedata unsigned char buffer116 _at_ 0x30;unsigned char i,temp=0,j=0;sbit P1_0=P10;void delay()unsig

23、ned char m,n;for(m=0;m255;m+)for(n=0;n255;n+);void main()P1_0=0;TMOD=0X20;TH1=0xf3;TL1=0xf3;SCON=0X40;PCON=0X80;EA=1;ES=1;TR1=1;for(i=0;i16;i+)buffer1i=i;SBUF=buffer10;/可省 while(1) SBUF=buffer1j; delay(); P1_0=P1_0; j+; if(j=16)j=0; while(TI=0);#include/甲发送(查询2)#include #define uchar unsigned charsb

24、it P1_0=P10;data unsigned char buffer16 _at_ 0x30;void delay(uchar j)uchar t; while (j-) for (t=0;t120;t+); void main()uchar i,temp; TMOD=0X20; TH1=0Xf3; TL1=0xf3; SCON=0X40; PCON=0X80; TR1=1; P1_0=0; while(1) for(i=0;i16;i+) bufferi=i; temp=bufferi; SBUF=temp; while(TI=0); TI=0; P1_0=1; delay(500);

25、 P1_0=0; delay(500); #include /乙查询#include #define uchar unsigned charuchar i,j,Hong1=0x40,a=0;void main()TMOD=0x20; TH1=0xf3; TL1= 0xf3; SCON=0x50; PCON=0x80;TR1=1; P1=0;for(i=0;i16;i+) while(RI=0); RI=0; DBYTEHong1=SBUF; a+; P1=DBYTEHong1; Hong1+; while(1); 实验九 串行通信综合实验通信要求:fosc=6M,波特率2400,通讯双方工作在

26、方式1,定时器1工作在方式2定时模式,计数初值设为:0xf3,SMOD=1。1、甲机通过点动开关的动作触发INT0下降沿中断,在中断程序中以查询方式向乙机发送开关K0K7的状态,设计发送程序和乙机接收程序(查询还是中断接收自定)。实验连线:甲机P1口接K0K7,点动开关接INT0;乙机P1口接LED0LED7;甲机RXD接乙机TXD,甲机TXD接乙机RXD,两机共地。2、甲机通过1s定时方式,在定时中断程序中以查询或中断方式向乙机发送P1口连接的开关K0K7的状态,乙机通过查询或中断方式接收甲机的开关信号并送乙机的P1口连接的LED灯LED0LED7上。为了便于观察发送过程,要求甲机每发送一个

27、数据使P2_0连接的指示灯LED0亮灭一次(亮灭延时时间自定,但要求能明显观察到亮灭状态转换)。设计发送程序和接收程序(查询还是中断接收自定)。实验连线:甲机P1口接K0K7,P2.0接LED0观察发送过程;乙机P1口接LED0LED7;甲机RXD接乙机TXD,甲机TXD接乙机RXD,两机共地。#include /甲1发送#include#define uchar unsigned charsbit P2_0=P20;uchar temp=0;void delay(unsigned int i) uchar j; for(;i0;i-) for(j=0;j125;j+);void main()

28、TMOD=0x21;TH1=0xf3;TL1=0xf3;SCON=0x40;PCON=0x80;TR1=0;EA=1;EX0=1;IT0=1;P2_0=0;P1=0xff;while(1);void int0(void) interrupt 0 using 0TR1= TR1;temp=P1;SBUF=temp;delay(500);P2_0=P2_0;delay(500);while(TI=0);TI=0;#include /九,2.甲发送(查询)unsigned char i=100,temp=0;sbit P2_0=P20;void main()TMOD=0X21;TH0=0xec;TL

29、0=0x78;TH1=0xf3;TL1=0xf3;SCON=0X40;PCON=0X80;EA=1;ET0=1;TR0=1;TR1=1;P1=0xff;P2_0=1;temp=P1; SBUF=temp; while(1);void temer0() interrupt 1TH0=0xec;TL0=0x78;i-;if(i=0) temp=P1; SBUF=temp; while(TI=0); TI=0; P2_0=P2_0; i=100;#include/乙接受(1.2相同)unsigned char temp=0;void main()TMOD=0x20;TH1=0xf3;TL1=0xf3

30、;SCON=0x50;PCON=0x80;TR1=1;P1=0;while(1)while(RI=0);RI=0;temp=SBUF;P1=temp;实验十定时、记数、显示设计一个带有控制功能的脉冲发生器/计数器系统,脉冲发生器发出周期为2秒的方波(提示:可由P1.0口输出,用发光二极管显示);被计数脉冲由T0口输入,所记录的脉冲数以十进制形式在数码管显示(至少应可记录256个脉冲);设两个按键,一个启动脉冲发生器,一个启动记数,(按一次启动,再按一次停止),不启动时,发光管灭,数码管显示学号。#include#include#define uint unsigned int#define u

31、char unsigned charsbit P0_1=P01;uchar i=200;uchar code seg1=0x06,0x7d,0x4f,0x4f,0x07,0x5b;uchar code y2=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;void delay(uint t) uchar a; while(t-)for(a=0;a200;a+);void main() uchar m,j; TMOD=0x15; TH1=0xec; TL1=0x78, TH0=0X00; TL0=0X00; EA=1; ET0=1; TR0=0

32、; TR1=0; P0_1=0; IT0=1; ET1=1; EX0=1; IT1=1; EX1=1; while(1) if(TR0=0) j=0x40; for(i=0;i6;i+) j= _cror_ (j,1); P1=seg1i; P2=j; delay(1); if(TR0=1) j=0x04; P1=y2TL0/100; P2=j; delay(1); j=0x02; P1=y2(TL0%100)/10; P2=j; delay(1); j=0x01; P1=y2(TL0%100)%10; P2=j; delay(1); void int0() interrupt 0 TR0=T

33、R0; void int1() interrupt 2 TR1=TR1; if(TR1=0) P0_1=0;void timer1() interrupt 3 TH1=0xEC; TL1=0x78; i-;if(i=0)P0_1=P0_1;i=200;实验十一、D/A转换实验实验内容:假设0832工作在单缓冲方式 口地址为 0X8000。 根据P1.0P1.1连接的K0K1的状态,分别实现下述表格功能所要求的功能: K1K0波形输出00幅值从1V上升到4V的锯齿波01幅值从1V上升到4V的三角波10幅值从1V上升到4V的梯形波11幅值从1V和4V的方波#include#include#defi

34、ne uchar unsigned char#define DA0832 XBYTE0x8000void delay()uchar m,n;for(m=0;m255;m+)for(n=0;n51;i-) DA0832=i; break; case 1: for(i=51;i51;i-) DA0832=i; break; case 2: for(i=51;i51;i-) DA0832=i; delay(); break; case 3: i=51; DA0832=i; delay(); i=205; DA0832=i; dalay(); break; 实验十二:A/D转换实验 1、IN0端连接电

35、位器滑动端,分别设计查询和中断程序不断采集电位器输出的模拟电压值,将A/D转换的结果通过P1口连接的8个LED显示出来。实验连线:CS0接0809片选端(地址为0x8000,P1.0P1.7接LED0LED7。在查询方式下P3.0接EOC,在中断方式下EOC通过反相器再接INT0即P3.2。2、定时数据采集程序设计:用T0定时30秒采集一次IN0连接的模拟信号并送P1口连接的LED显示的程序#include/1.查询#include#define uchar unsigned char#define IN0 XBYTE0X8000sbit EOC=P30;sbit start=P21;/*sb

36、it OE=P20;sbit CLOCK=P22;sbit a=P23;sbit b=P24;sbit c=P25;*/void main()uchar *ad;uchar x;/*a=0;b=0;c=0;*/while(1)ad=&IN0;*ad=0;/*start=0;start=1;start=0;*/while(EOC=0);x=*ad;/OE=1;P1=x;#include/1.查询#include#define uchar unsigned char#define IN0 XBYTE0X8000sbit EOC=P30;void main()uchar t;P1=0;while(1

37、)IN0=0;/启动转换,使START(内部和WR非相连)置1while(EOC);/EOC为1,本句死循环;EOC为0,进行下句while(!EOC);/EOC为0,本句死循环;EOC为1,进行下句;这两句共同构成EOC上升沿检测t=IN0;P1=t;#include/2.T0定时3秒#include#define uchar unsigned char#define IN0 XBYTE0X8000sbit EOC=P30;uchar j=200;void main()TMOD=0x01;TL0=0x3C;TH0=0xb0;P1=0x00;EA=1;ET0=1;TR0=1;while(1);

38、void temer0() interrupt 1uchar x;uchar xdata *ad;TL0=0x3c;TH0=0xb0;j-;if(j=0)ad=&IN0; *ad=0; while(EOC=0); x=*ad; P1=x; j=200; #include/2.T0定时3秒#include#define uchar unsigned char#define IN0 XBYTE0X8000sbit EOC=P30;uchar j=200;void main()TMOD=0x01;TL0=0x3C;TH0=0xb0;P1=0x00;EA=1;ET0=1;TR0=1;while(1);

39、void temer0() interrupt 1uchar t;TL0=0x3c;TH0=0xb0;j-;if(j=0)IN0=0;/启动转换,使START(内部和WR非相连)置1while(EOC);/EOC为1,本句死循环;EOC为0,进行下句while(!EOC);/EOC为0,本句死循环;EOC为1,进行下句;这两句共同构成EOC上升沿检测t=IN0;P1=t; j=200; #include/1.数码管显示#include#include#define uchar unsigned char#define uint unsigned int#define IN0 XBYTE0X80

40、00uchar code y2=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;sbit EOC=P30;void delay(uint t) uchar a; while(t-)for(a=0;a200;a+);void main()uchar b,j;P1=0;while(1)IN0=0;/启动转换,使START(内部和WR非相连)置1while(EOC);/EOC为1,本句死循环;EOC为0,进行下句while(!EOC);/EOC为0,本句死循环;EOC为1,进行下句;这两句共同构成EOC上升沿检测b=IN0;j=0x04; P1=y2b/100; P2=j; delay(1); j=0x02; P1=y2(b%100)/10; P2=j; delay(1); j=0x01; P1=y2(b%100)%10; P2=j; delay(1); 专心-专注-专业

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!