嵌入式微控制器技术实验任务书附程序和仿真图Word文件下载.docx
《嵌入式微控制器技术实验任务书附程序和仿真图Word文件下载.docx》由会员分享,可在线阅读,更多相关《嵌入式微控制器技术实验任务书附程序和仿真图Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
LED灯控制(使用8255接口芯片)
使用汇编语言、C语言编程。
通过KK1实现LED
灯工作方式即时控制,完成LED开关控制显示和LED灯左循环、
右循环、间隔闪烁功能。
ORG0000H
LJMPMAIN
ORG0003H
LJMPINT00
ORG0030H
MAIN:
MOVSP,#70H
SETBIT0
SETBEA
SETBEX0
CLRPX0
MOVDPTR,#0FF7FH
MOVA,#80H
MOVX@DPTR,A
MOVR0,#0
MOVDPTR,#0FF7CH
LOOP:
CJNER0,#0,L1
MOVA,#0FFH
W0:
CJNER0,#0,LOOP
AJMPW0
L1:
CJNER0,#1,L2
MOVA,#00H
W1:
CJNER0,#1,LOOP
AJMPW1
L2:
CJNER0,#2,L3
MOVA,#0FEH
;
MOVR1,#8
W2:
MOVX@DPTR,A
LCALLDELAY
RLA
CJNER0,#2,LOOP
SJMPW2
DJNZR1,W2
LJMPLOOP
L3:
CJNER0,#3,L4
MOVA,#7FH
W3:
RRA
CJNER0,#3,LOOP
SJMPW3
L4:
W4:
CJNER0,#4,LOOP
SJMPW4
DELAY:
MOVR7,#255
D1:
MOVR6,#255
DJNZR6,$
DJNZR7,D1
RET
ORG0FFH
INT00:
PUSHACC
PUSHPSW
INCR0
CJNER0,#5,LL
LL:
POPPSW
POPACC
RETI
END
实验四 中断系统实验(基于SST89E554RC)
按照实验指导书之“3.2中断系统实验”中相关实验项目要求,完成汇编语言和C语言基本程序功能调试与验证。
(要求:
Proteus环境下,任选一题完成)
在完成交通灯基本功能基础上,当有急救车到达时,两向交通信号为全红,以便让急救车通过。
假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。
本实验题以按键为中断申请,表示有急救车通过。
ORG0000H
LJMPMAIN
ORG0003H
LJMPINT00
ORG0030H
SETBIT0
SETBEA
SETBEX0
CLRPX0
MOVDPTR,#0FF7FH
MOVA,#80H
MOVDPTR,#0FF7CH
MOVA,#1EH
LCALLDELAY2
MOVR1,#3
LH2:
MOVA,#1DH
LCALLDELAY
MOVA,#1FH
DJNZR1,LH2
MOVA,#33H
LH3:
MOVA,#2BH
MOVA,#3BH
DJNZR1,LH3
LJMPLOOP
DELAY2:
MOVR0,#8
LH1:
DJNZR0,LH1
RET
MOVR4,#25
MOVR5,#100
MOVR6,#100
D2:
DJNZR6,D2
DJNZR5,D2
DJNZR4,D2
PUSHACC
PUSHPSW
MOVA,#1BH
MOVR0,#5
LH:
DJNZR0,LH
POPACC
RETI
END
实验五定时器/计数器实验(基于SST89E554RC)
按照实验指导书之“3.3定时/计数器实验”基本实验项目要求、完成汇编语言和C语言程序功能调试与验证。
题目一:
定时器控制LED灯
由单片机内部定时器1,按方式1工作,即作为16位
定时器使用每0.05秒钟T1溢出中断一次。
P1口的P1.0-P1.7
分别接八个发光二极管。
编写程序模拟时序控制装置。
开机
后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,
L7亮,第四秒钟L6,L8亮,第五秒钟L1,L3,L5,L7亮,
第六秒钟L2,L4,L6,L8亮,第七秒钟八个LED灯全亮,第
八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮……
一直循环下去。
计数器实验
单片机内部定时计数器,按计数器模式和方式1工作,
对P3.4(T0)引脚进行计数。
使用T1作定时器,50ms中断一
次,看T0内每0.50来了多少脉冲,将其数值按二进制在LED
灯上显示出来,5秒后再次测试。
ORG0000H
ORG000BH
LJMPINTT0
MOVSP,#60H
MOVTH0,#3CH
MOVTL0,#0B0H
MOVTMOD,#1
MOVIE,#82H
MOVR0,#20
MOVR1,#1
MOVA,#0FAH
SETBTR0
HERE:
MOVP1,A
AJMPHERE
INTT0:
DJNZR0,GH
CJNER1,#1,L1
SJMPED
CJNER1,#2,L2
RLA
CJNER1,#3,L3
MOVA,#0AFH
CJNER1,#4,L4
CJNER1,#5,L5
MOVA,#0AAH
L5:
CJNER1,#6,L6
L6:
CJNER1,#7,L7
MOVA,#00H
L7:
MOVA,#0FFH
MOVR1,#0
ED:
INCR1
GH:
实验六 A/D、D/A转换实验(基于SST89E554RC)
基本部分:
按照实验指导书之“4.3A/D转换实验”项目要求和“4.4D/A
转换实验”项目要求,完成汇编语言和C语言程序功能调试与验证。
Proteus环境下完成)
小键盘(或开关量)给定(并显示工作状态),选择信号源输出波形类型(D/A转换方式),经过A/D采样后,将采样数据用LED灯显示当前模拟信号值大小及变化状态。
#include<
reg51.h>
math.h>
intrins.h>
#defineucharunsignedchar
sbitS1=P2^0;
sbitS2=P2^1;
sbitS3=P2^2;
sbitS4=P2^3;
sbitDA_DIN=P2^4;
sbitDA_CLK=P2^5;
sbitDA_CS=P2^6;
sbitcs=P3^0;
sbitclk=P3^1;
sbitdat=P3^2;
sbitP3_3=P3^3;
bdataucharaddata;
sbitadin0=addata^0;
unsignedcharcishu;
voidquyan(void);
voiddelay_s(unsignedcharn)
{
unsignedchari;
for(i=0;
i<
n;
i++);
}
uchartlc549ad(void)
{
uchari;
clk=0;
cs=0;
_nop_();
8;
i++)
{//dat=1;
clk=1;
delay_s(20);
adin0=dat;
addata=addata<
<
1;
clk=0;
}
cs=1;
returnaddata;
voidTLC5615_DA_conver(unsignedintDA_data)//TLC5615DA转换程序
DA_data=DA_data<
2;
DA_CS=1;
DA_CLK=0;
DA_DIN=0;
DA_CS=0;
16;
{
DA_DIN=CY;
DA_CLK=1;
delay_s(0x02);
13;
delay_s(0xff);
//P1=tlc549ad();
voidsin_fun(unsignedcharAPx)
floatx,y;
unsignedintDA;
quyan();
while
(1)
for(x=0;
x<
(2*3.1415);
x+=0.1)
y=sin(x);
DA=APx+y*APx;
TLC5615_DA_conver(DA);
if(((S1==0)||(S2==0)||(S3==0))||((S1==1)&
&
(S2==1)&
(S3==1)&
(S4==1)))
TR0=0;
break;
voidsanjiao(unsignedintAPx,unsignedcharstep)
unsignedintx;
quyan();
2*APx;
x+=step)
TLC5615_DA_conver(x);
for(x=2*APx;
x>
x-=step)
if(((S1==0)||(S2==0)||(S4==0))||((S1==1)&
voidfangb(unsignedcharAPx,unsignedintnum)
unsignedintx;
num;
x++)
TLC5615_DA_conver(2*APx);
TLC5615_DA_conver(0);
if(((S4==0)||(S2==0)||(S3==0))||((S1==1)&
voidjvcb(unsignedcharAPx,unsignedintwide)
unsignedintx,Y;
wide;
x+=1)
Y=APx-10*x;
TLC5615_DA_conver(Y);
if(((S1==0)||(S3==0)||(S4==0))||((S1==1)&
voidquyan(void)
{cishu=10;
TH0=0x3c;
TL0=0xb0;
TMOD=0x01;
IE=0x82;
TR0=1;
time0()interrupt1using1
cishu--;
if(cishu==0)
{
P1=tlc549ad();
cishu=10;
voidmain(void)
while
(1)
P0=0xc0;
P1=0x00;
TLC5615_DA_conver(0);
if((S1==0)&
(S4==1))
{
P0=0xf9;
fangb(255,50);
}
elseif((S1==1)&
(S2==0)&
{
P0=0xa4;
jvcb(250,25);
(S3==0)&
P0=0xb0;
sanjiao(250,25);
(S4==0))
P0=0x99;
sin_fun(250);
}
实验七 步进电机控制实验
1、按照实验指导书之“5.1步进电机实验”项目要求,完成基于SST89E554RC微控制器的C语言程序功能调试与验证;
2、按照DSP2812开发板使用说明书之“实验二十二步进电机实验(四相单四拍)”项目要求,完成基于DSP2812微控制器的C语言程序功能调试与验证;
(任选一题完成)
1、在分析掌握基于SST89E554RC微控制器实现步进电机控制原理基础上,实现步进电机速度可调和方向可调;
2、在分析掌握基于DSP2812微控制器实现步进电机控制原理基础上,实现步进电机速度可调和方向可调
#include<
sbitp30=P3^0;
sbitp32=P3^2;
sbitp31=P3^1;
unsignedcharL_value[2][8]={0x0E0,0x0C0,0x0D0,0x090,0x0B0,0x030,0x070,0x060,0x060,0x070,0x030,0x0B0,0x090,0x0D0,0x0C0,0x0E0};
//步进电机正反转表
unsignedchara[4]={0xff,0x08,0xfc,0xfe};
unsignedcharspeed=3;
voiddelay(unsignedinttime)
unsignedinti;
i<
time;
i++);
voidmain()
{unsignedcharm;
IT0=1;
EA=1;
EX0=1;
PX0=0;
p30=1;
p31=1;
while(~p30)
P2=a[speed];
for(m=0;
m<
m++)
{
P1=L_value[~p31][m];
delay(4000*speed);
}
if(p30)
for(;
p30==1;
)P2=a[0];
voidextern0()interrupt0
speed--;
if(speed==0)
speed=3;
P2=a[speed];
实验八直流电机开环控制实验
1、按照实验指导书之“5.2直流电机PWM调速实验”项目要求,完成基于SST89E554RC微控制器的C语言程序功能调试与验证;
2、按照DSP2812开发板使用说明书之“实验二十一直流电机实验”项目要求,完成基于DSP2812微控制器的C语言程序功能调试与验证;
3、在分析掌握基于SST89E554RC微控制器实现直流电机控制电路原理基础上,实现电机速度可调;
4、在分析掌握基于DSP2812微控制器实现直流电机控制原理基础上,实现电机速度波段式可调
#defineT_value(unsignedchar)0xf0//T周期值
#defineTH0_value(unsignedchar)0xFE//定时器T0计数值(高)
#defineTL0_value(unsignedchar)0x00//定时器T0计数值(低)
unsignedchara[4]={~0xfe,~0xfc,~0x08,~0xff};
unsignedcharspeed[3]={0xb0,0x80,0x40};
sbitDRV=P1^7;
sbitKG=P1^0;
unsignedcharT_Count;
//延时次数
unsignedcharT1_value=0xb0;
//T周期中高电平周期T1值
unsignedcharTx;
unsignedcharj=0;
voidint_tim0()interrupt1
TH0=TH0_value;
TL0=TL0_value;
T_Count--;
voidintern0()interrupt0
j++;
if(j==3)
j=0;
T1_value=speed[j];
Tx=T1_value;
T_Count=0;
DRV=1;
P2=a[j];
TMOD=0x01;
//定时器0初始化,定时基数
TR0=1;
ET0=1;
//外中断0
PX0=1;
DRV=1;
//P17电平
T_Count=T1_value;
Tx=speed[0];
if(KG)
for(;
KG==