“嵌入式微控制器技术”实验任务书(电气、自动化)
一、实验目的与要求:
1、熟练掌握基于SST89E554RC微控制器的Keil C51集成开发工具的操
作及调试程序的方法(包括:仿真调试与脱机运行间的切换方法);掌握
其他相关微控制器集成开发工具的使用及调试方法;
2、熟练掌握基于SST89E554RC单片机核心板及I/O扩展实验系统的电
路结构原理、设计与应用;掌握其他相关微控制器最小系统设计与应用;
3、熟练掌握在Keil C51与Proteus仿真软件虚拟联机环境下的基于51
单片机控制器数字接口电路的硬件、软件设计方法与功能调试;
4、完成本实验课程所要求的全部实验内容,并写出实验报告。
二、微机原理与接口技术综合实验室资源简介
实验室为以下实验活动提供条件:
1、基于唐都实验系统的微机原理与接口技术实验(包括汇编语言、C
语言/C++语言软件编程实验和16位/32位微机接口电路应用实验);
2、基于SST89E554RC微控制器技术软/硬件实验(提供支持汇编语言、
C语言编程的Keil C51集成开发工具、最小核心板+唐都实验系统箱);
3、基于DSP2407、DSP2812、DSP28335微控制器技术软件/硬件实验(提
供支持C语言编程的TI公司的CCS集成开发工具、DSP系列学习开发板、直流电机、步进电机、液晶);
4、基于Freescale的16位MC9S12XS128微控制器技术应用实验(提
供支持C语言编程的CodeWarrier 5.0 For S12集成开发工具、
HF-MC9S12XS128EVB-A 核心板);
5、基于ARM的16/32位ARM7LPC2103TDMI-S微控制器技术基础实验(提供
支持C、C++语言编程的ARM公司推出的ARM微控制器ADS 1.2集成开发工具、EasyARM2103开发板);
6、基于ARM Cortex?-M3先进内核的LM3S1138微控制器技术基础实验(提
供支持C语言编程的IAR5.11集成开发工具、EasyARM1138开发板);
7、基于LabVIEW虚拟仪器技术的NI ELVIS II+实验仪器,提供信号与
系统实验、单级倒立摆控制实验、基于面包板DIV设计
三、嵌入式微控制器技术实验内容及要求
本课程实验学时为16学时(8次实验),实验将以开放实验方式进行,实验内容包括SST89E554RC微控制器实验和DSP2812微控制器实验,鼓励学生自主学习,在完成相关实验内容后,及时提交给指导老师进行检查验收并自主进行相关微控制器技术应用学习与实验。
实验一系统认识实验(基于SST89E554RC)
基本部分:
按照实验指导书之“2.1 系统认识实验”(P17~P23页)内容要求,熟悉实验环境及方法,完成基于汇编语言程序范例的实验调试
与验证。
提高部分:
完成实验指导书之“2.2 数码转换实验”。
题目一:汇编语言实现BCD码整数转换二进制整数(验证性)
题目二:汇编语言实现二进制整数转换十进制整数的设计(设计性)
实验二数据传送与排序程序设计实验(基于SST89E554RC)
基本部分:
按照实验指导书之“2.5 数据排序实验”(P33页)内容要求完成调试与验证。
提高部分:
汇编语言编程实现把(R2,R3)源RAM区首址内的(R6,R7)个字节数据,传送到(R4,R5)目的RAM区,完成目的区数据升
序排列。
实验三数字量输入输出实验(基于SST89E554RC)
基本部分:
按照实验指导书之“3.1 数字量输入输出实验”基本实验项目要求,完成汇编语言和C语言基本程序功能调试与验证。
提高部分:(任选一题)
题目一:LED交通灯控制(使用8255接口芯片)
要求:使用汇编语言和C语言编程。功能为:通过开关实现
LED灯工作方式即时控制,完成LED交通灯的开关控制显示功
能和LED交通灯自动循环显示功能。
题目二:LED灯控制(使用8255接口芯片)
要求:使用汇编语言、C语言编程。功能为:通过KK1实现LED
灯工作方式即时控制,完成LED开关控制显示和LED灯左循环、
右循环、间隔闪烁功能。
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT00
ORG 0030H
MAIN:MOV SP,#70H
SETB IT0
SETB EA
SETB EX0
CLR PX0
MOV DPTR,#0FF7FH
MOV A,#80H
MOVX @DPTR,A
MOV R0,#0
MOV DPTR,#0FF7CH
LOOP:
CJNE R0,#0,L1
MOV A,#0FFH
MOVX @DPTR,A
W0: CJNE R0,#0,LOOP
AJMP W0
L1: CJNE R0,#1,L2 MOV A,#00H
MOVX @DPTR,A
W1: CJNE R0,#1,LOOP AJMP W1
L2: CJNE R0,#2,L3 MOV A,#0FEH
; MOV R1,#8
W2: MOVX @DPTR,A LCALL DELAY
RL A
CJNE R0,#2,LOOP SJMP W2
;DJNZ R1,W2
;LJMP LOOP
L3: CJNE R0,#3,L4 MOV A,#7FH
W3: MOVX @DPTR,A LCALL DELAY
RR A
CJNE R0,#3,LOOP SJMP W3
L4:
MOV A,#0FEH
W4: MOVX @DPTR,A LCALL DELAY
RL A
RL A
CJNE R0,#4,LOOP SJMP W4
DELAY:
MOV R7,#255
D1: MOV R6,#255 DJNZ R6,$
DJNZ R7,D1
RET
ORG 0FFH
INT00:
PUSH ACC
INC R0
CJNE R0,#5,LL
MOV R0,#0
LL: POP PSW
POP ACC
RETI
END
实验四中断系统实验(基于SST89E554RC)
基本部分:
按照实验指导书之“3.2 中断系统实验”中相关实验项目要求,完成汇编语言和C语言基本程序功能调试与验证。
提高部分:(要求:Proteus环境下,任选一题完成)
在完成交通灯基本功能基础上,当有急救车到达时,两向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为10
秒,急救车通过后,交通灯恢复中断前状态。本实验题以按键为中
断申请,表示有急救车通过。
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT00
ORG 0030H
MAIN:MOV SP,#70H
SETB EA
SETB EX0
CLR PX0
MOV DPTR,#0FF7FH
MOV A,#80H
MOVX @DPTR,A
MOV DPTR,#0FF7CH LOOP:
MOV A,#1EH
MOVX @DPTR,A
LCALL DELAY2
MOV R1,#3
LH2:MOV A,#1DH
MOVX @DPTR,A
LCALL DELAY
MOV A,#1FH
MOVX @DPTR,A
LCALL DELAY
DJNZ R1,LH2
MOV A,#33H
MOVX @DPTR,A
LCALL DELAY2
MOV R1,#3
LH3:MOV A,#2BH
MOVX @DPTR,A
LCALL DELAY
MOV A,#3BH
MOVX @DPTR,A
LCALL DELAY
DJNZ R1,LH3
LJMP LOOP
DELAY2:
MOV R0,#8
LH1:LCALL DELAY
DJNZ R0,LH1
RET
DELAY:
MOV R4,#25
MOV R5,#100
MOV R6,#100
D2:DJNZ R6,D2
MOV R6,#100
DJNZ R5,D2
MOV R5,#100
DJNZ R4,D2
RET
INT00:
PUSH ACC
PUSH PSW
MOV A,#1BH
MOVX @DPTR,A ; MOV R0,#5 LH: LCALL DELAY ; DJNZ R0,LH
POP PSW
POP ACC
RETI
END
实验五定时器/计数器实验(基于SST89E554RC)
基本部分:
按照实验指导书之“3.3 定时/计数器实验”基本实验项目要求、完成汇编语言和C语言程序功能调试与验证。
提高部分:(要求:Proteus环境下,任选一题完成)
题目一:定时器控制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秒后再次测试。
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0030H
MAIN: MOV SP,#60H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV TMOD,#1
MOV IE,#82H
MOV R0,#20
MOV R1,#1
MOV A,#0FAH
SETB TR0
HERE: MOV P1,A
AJMP HERE
INTT0:
PUSH PSW
DJNZ R0,GH
MOV R0,#20
CJNE R1,#1,L1
MOV A,#0FAH
SJMP ED
L1: CJNE R1,#2,L2
RL A
SJMP ED
L2: CJNE R1,#3,L3
MOV A,#0AFH
SJMP ED
L3: CJNE R1,#4,L4
RL A
SJMP ED
L4: CJNE R1,#5,L5 MOV A,#0AAH
SJMP ED
L5: CJNE R1,#6,L6
RL A
SJMP ED
L6: CJNE R1,#7,L7
MOV A,#00H
SJMP ED
L7: MOV A,#0FFH
MOV R1,#0 ED: INC R1
GH: POP PSW
RETI
END
实验六A/D、D/A转换实验(基于SST89E554RC)
基本部分:
按照实验指导书之“4.3 A/D转换实验”项目要求和“4.4 D/A 转换实验”项目要求,完成汇编语言和C语言程序功能调试与验证。
提高部分:(要求:Proteus环境下完成)
小键盘(或开关量)给定(并显示工作状态),选择信号源输出波形类型(D/A转换方式),经过A/D采样后,将采样数据用LED
灯显示当前模拟信号值大小及变化状态。
#include
#include
#include
#define uchar unsigned char
sbit S1=P2^0;
sbit S2=P2^1;
sbit S3=P2^2;
sbit S4=P2^3;
sbit DA_DIN=P2^4;
sbit DA_CLK=P2^5;
sbit DA_CS=P2^6;
sbit cs=P3^0;
sbit clk=P3^1;
sbit dat=P3^2;
sbit P3_3 = P3^3;
bdata uchar addata;
sbit adin0=addata^0;
unsigned char cishu;
void quyan(void);
void delay_s(unsigned char n)
{
unsigned char i;
for(i=0;i}
uchar tlc549ad(void)
{
uchar i;
clk=0;
cs=0;
_nop_();
for(i=0;i<8;i++)
{ //dat=1;
clk=1;
delay_s(20);
adin0=dat;
addata=addata<<1;
clk=0;
}
cs=1;
return addata;
}
void TLC5615_DA_conver(unsigned int DA_data) //TLC5615DA转换程序{
unsigned char i;
DA_data=DA_data<<2;
DA_CS=1;
DA_CLK=0;
DA_DIN=0;
DA_CS=0;
for(i=0;i<16;i++)
{
DA_data=DA_data<<1;
DA_DIN=CY;
DA_CLK=1;
delay_s(0x02);
DA_CLK=0;
delay_s(0x02);
}
DA_CS=1;
for(i=0;i<13;i++)
delay_s(0xff);
//P1=tlc549ad();
delay_s(0xff);
}
void sin_fun(unsigned char APx)
{
float x,y;
unsigned int DA;
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;
}
}
}
void sanjiao(unsigned int APx,unsigned char step)
{
unsigned int x;
quyan();
while(1)
{
for(x=0;x<2*APx;x+=step)
TLC5615_DA_conver(x);
for(x=2*APx;x>1;x-=step)
TLC5615_DA_conver(x);
if(((S1==0)||(S2==0)||(S4==0))||((S1==1)&&(S2==1)&&(S3==1)&&(S4==1))) {
TR0=0;
break;
}
}
}
void fangb(unsigned char APx,unsigned int num)
{
unsigned int x;
quyan();
while(1)
{
for(x=0;xTLC5615_DA_conver(2*APx);
for(x=0;xTLC5615_DA_conver(0);
if(((S4==0)||(S2==0)||(S3==0))||((S1==1)&&(S2==1)&&(S3==1)&&(S4==1))) {
TR0=0;
break;
}
}
}
void jvcb(unsigned char APx,unsigned int wide)
{
unsigned int x,Y;
quyan();
while(1)
{
for(x=0;x{
Y=APx-10*x;
TLC5615_DA_conver(Y);
}
if(((S1==0)||(S3==0)||(S4==0))||((S1==1)&&(S2==1)&&(S3==1)&&(S4==1))) {
TR0=0;
break;
}
}
}
void quyan(void)
{ cishu=10;
TH0=0x3c;
TL0=0xb0;
TMOD=0x01;
IE=0x82;
TR0=1;
}
time0 () interrupt 1 using 1
{
TH0=0x3c;
TL0=0xb0;
cishu--;
if(cishu==0)
{
P1=tlc549ad();
cishu=10;
}
}
void main(void)
{
while(1)
{
P0=0xc0;
P1=0x00;
TLC5615_DA_conver(0);
if((S1==0)&&(S2==1)&&(S3==1)&&(S4==1))
{
P0=0xf9;
fangb(255,50);
}
else if((S1==1)&&(S2==0)&&(S3==1)&&(S4==1))
{
P0=0xa4;
jvcb(250,25);
}
else if((S1==1)&&(S2==1)&&(S3==0)&&(S4==1))
{
P0=0xb0;
sanjiao(250,25);
}
else if((S1==1)&&(S2==1)&&(S3==1)&&(S4==0))
{
P0=0x99;
sin_fun(250);
}
}
}
实验七步进电机控制实验
基本部分:
1、按照实验指导书之“5.1步进电机实验”项目要求,完成
基于SST89E554RC微控制器的C语言程序功能调试与验
证;
2、按照DSP2812开发板使用说明书之“实验二十二步进电
机实验(四相单四拍)”项目要求,完成基于DSP2812微控
制器的C语言程序功能调试与验证;
提高部分:(任选一题完成)
1、在分析掌握基于SST89E554RC微控制器实现步进电机控制
原理基础上,实现步进电机速度可调和方向可调;
2、在分析掌握基于DSP2812微控制器实现步进电机控制原理
基础上,实现步进电机速度可调和方向可调
#include
sbit p30=P3^0;
sbit p32=P3^2;
sbit p31=P3^1;
unsigned char L_value[2][8] = {0x0E0, 0x0C0, 0x0D0, 0x090, 0x0B0, 0x030, 0x070, 0x060,0x060, 0x070, 0x030, 0x0B0, 0x090, 0x0D0, 0x0C0,0x0E0};//步进电机正反转表unsigned char a[4] = {0xff,0x08, 0xfc,0xfe };
unsigned char speed=3;
void delay(unsigned int time)
{
unsigned int i;
for(i=0; i