单片机课程设计报告
实验五
系 别 物理与电子工程学院 年 级 专 业
班 级
学 号
学生姓名
指导教师
设计时间
常熟理工学院课程设计报告
目录
1.题目...................................2
2.实验要求...............................2
2.1实验目的............................2
2.2实验内容............................2
3.总体设计 .............................. 2
3.1硬件设计 ........................... 2
3.2软件设计 ........................... 4
4. 运行结果 ............................. 7
5.总结与体会 ............................ 7
6.参考文献 .............................. 8
1
常熟理工学院课程设计报告
1.题目
A/D转换实验
2. 实验要求
2.1:实验目的
1.
2.
3. 了解典型AD芯片结构与功能; 掌握ADC0809与8051接口电路设计; 掌握查询和中断方式的AD编程。
2.2:实验内容
1、编写编制程序实现锯齿波、三角波、正弦波输出函数;
void wave_rect(void){}
void wave_stair(void){}
void wave_sin(void){}
其中wave_sin()可采用查表法(根据提供的mysin.h)
2、设计三个独立按键,通过按键实现各波形的输出。
3.总体设计
3.1硬件设计
1. AD转换器概述
随着数字技术,特别是计算机技术的飞速发展,在现代控制、通信及检测领域中,为提高系统性能指标,对信号的处理无不广泛地采用了数字计算机技术。由于系统的实际对象往往都是一些模拟量 (如:温度、速度、压力、电压、电流、图像等),要使计算机或数字仪表能识别、处理这些信号,必须首先将这些模拟信号转换成数字信号;而经计算机分析、处理后输出的数字量往往需要将其转换为相应的模拟信号才能为执行机构所接收。这样就需要一种能在模拟信号与数字信号之间起桥梁作用的电路-模/数转换器(A/D:Analog to Digital Converter)和数/模转换器(D/A: Digital to Analog Converter)。也就出现了单片机的模/数转换(A/D)和数/模转换(D/A)的接口问题。
2.A/D转换器分类
按转换原理可分为:计数式、双积分式、逐次逼近式、并行式。
3.ADC0809与典型电路
2
常熟理工学院课程设计报告
4. 外部RAM读写操作
(1)外部RAM寻址1_变量绝对寻址
type [memory_space] variable_name _at_ constant;
struct link
{ struct link idata *next;
char code *test;
};
struct link list idata _at_ 0x40; /* list at idata 0x40 */ char xdata text[256] _at_ 0xE000; /* array at xdata 0xE000 */ unsigned char xdata PA8255 _at_ 0x8000; /* int at xdata 0x8000 */
a=PA8255; //PA输入
PA8255=b; //PA输出
(2)外部RAM寻址2_宏定义
ABSACC.H 提供了下列方便的宏(Macro)定义
//ABSACC.H
#define CBYTE ((unsigned char volatile code *) 0)
#define DBYTE ((unsigned char volatile data *) 0)
#define PBYTE ((unsigned char volatile pdata *) 0)
#define XBYTE ((unsigned char volatile xdata *) 0)
#define CWORD ((unsigned int volatile code *) 0)
#define DWORD ((unsigned int volatile data *) 0)
#define PWORD ((unsigned int volatile pdata *) 0)
#define XWORD ((unsigned int volatile xdata *) 0)
#include <absacc.h>
#define PA8255 XBYTE[0x7FFF]
3
常熟理工学院课程设计报告
3.2软件设计
源程序:
#include "reg51.h"
#include "absacc.h"
#define COUNT 5000
#define AIN0 XBYTE[0x0000]
sbit EOC=P3^3;
unsigned char LED_seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //unsigned char YLED_seg[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0xf7,0xff,0xef}; unsigned char LED_bit[4]={0x01,0x02,0x04,0x08};
unsigned char LED_buf[3]={0};
unsigned char LED_S;
unsigned char LED_B;
//fosc=11.0592MHz,9600bps
//串口初始化函数9600bps
void Sbuf_Init(void)
{
SCON=0x50; //10位方式
//波特率设置 PCON=0x00; //波特率不倍增
TMOD=(TMOD&0x0f)|0x20;//T1方式2
TH1=0xfd; //T1计数初值
TL1=0xfd;
//ES=1;EA=1; //串口中断使能
TR1=1; //启动定时器
}
void T0_ISR(void) interrupt 1
4
常熟理工学院课程设计报告
{
}
void Timer0_Init(void) {
TMOD=(TMOD&0xf0)|0x01; TH0=(65536-COUNT)/256; TL0=(65536-COUNT)%256; ET0=1; EA=1;
5 static unsigned char i=0; TH0=(65536-COUNT)/256; TL0=(65536-COUNT)%256; if(i==2) { P2=~LED_bit[i]; //先送位码 P1=LED_seg[LED_buf[i]]|0x80; //再送段码 } else { } P2=~LED_bit[i]; //先送位码 P1=LED_seg[LED_buf[i]]; //再送段码 i++; if(i==3) i=0;
常熟理工学院课程设计报告
}
TR0=1;
void delay(unsigned int n)
{
}
void main(void)
{
unsigned int i=0,ad,pre_ad=0; Sbuf_Init(); Timer0_Init(); while(1) { AIN0=0; i=i; i=i; delay(20); while(EOC==0); //等待AD转换结束 ad=AIN0; //读AD转换结果 if(ad!=pre_ad) { //ad=ad/51; LED_buf[2]=(ad*100/51)/100; LED_buf[1]=(ad*100/51)/10%10; LED_buf[0]=(ad*100/51)%10;
6 unsigned int i; for(i=0;i<n;i++) ; //启动转换
常熟理工学院课程设计报告
} pre_ad=ad;
} }
4.运行结果
5.总结与体会
通过本次实验,我们了解了典型AD芯片结构与功能;掌握了ADC0809与8051接口电路设计的方法以及查询和中断方式的AD编程,顺利地完成了教学目标。在实验过程中,遇到了一些困难,比如输出的模拟量有误差,我们排查了很久,发现计算的语句并没有错误,而是由于计算的数值远远超出
7
常熟理工学院课程设计报告
了定义类型的范围,所以我们把字符型换成整型,实验结果就正确了。虽然这只是一个很小的错误,发现错误和改正错误的过程却让我们学到了很多,我们没有依赖别人,而是自己一点一点地排查,这样增强了我们的自信心,并且改掉了心理上事事依赖别人的坏习惯。
6.参考文献
单片机的C语言应用程序设计
学出版社
新概念51单片机C语言教程 主编 孙娟 马忠梅主编 郭天祥
8 北京航空航天大 电子工业出版社社
单片机原理及应用
实验报告
班级:电子0911
学号:0720106114
姓名:征安杰
20##年12月
实验一 P1口输入/输出实验
一、实验目的
1、掌握P1口简单使用,程序的简单编程。
2、学习延时程序的编写和使用。
二、实验内容
P1口做输出口,编写程序,使P1口接的8个发光二极管L1—L8按16进制加一方式点亮发光二极管。
三、实验说明
1P1口是准双向口,它作为输出口时与一般的双向口使用方法相同,由准双向口结构可知:当P1口作为输入口时,必须先对它置高电平,使内部MOS管截止,因内部上拉电阻是20KΩ—40KΩ,故不会对外部输入产生影响。若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。
2延时子程序的延时计算问题。对于延时程序
DELAY :MOV R6, #00H
DELAY1:MOV R7, #80H
DJNZ R7, $
DJNZ R6, DELAY1
查指令表可知MOV、DJNZ指令均需用两个机器周期,而一个机器周期时间长度为12/ 6.0MHZ,所以该段指令执行时间为:((80+1)×256+1)×2×(12÷6000000)=132.1ms
四、实验步骤
①P33用插针连至K1, P10—P17用插针连至L1—L8。
②从起始地址0540H开始连续运行程序(输入0540后按EXEC键)。
③开关K1每拨动一次,L1—L8发光二极管按16进制方式加一点亮。〖LM〗
五、实验原理图
六、实验程序
ORG 0540h
HA1S: MOV A,#00H
HA1S1: JB P3.3,HA1S1
MOV R2,#20H
LCALL DELAY
JB P3.3,HA1S1
HA1S2: JNB P3.3,HA1S2
MOV R2,#20H
LCALL DELAY
JNB P3.3,HA1S2
INC A
PUSH ACC
CPL A
MOV P1,A
POP ACC
AJMP HA1S1
DELAY: PUSH 02H
DELAY1: PUSH 02H
DELAY2: PUSH 02H
DELAY3: DJNZ R2,DELAY3
POP 02H
DJNZ R2,DELAY2
POP 02H
DJNZ R2,DELAY1
POP 02H
DJNZ R2,DELAY
RET
END
七、实验感想
通过本实验,我掌握了P1口简单使用,程序的简单编程以及学会了延时程序的编写和使用。实验中,当P1口用作输入口时,必须先对它置“1”。若不先对它置“1”,读入的数据不一定正确。
实验二外部中断实验
一、实验目的
掌握工业顺序控制程序的简单编程,中断的使用。
二、实验内容
8032的P10—P16控制注塑机的七道工序,现模拟控制七只发光二极管的点亮,高电平有效,设定每道工序时间转换为延时,P3.4为开工启动开关,低电平启动。P3.3为外故障输入模拟开关,P3.3为0时不断告警。P1.7为报警声音输出,设定6道工序只有一位输出,第七道工序三位有输出。
三、实验说明
实验中用外部中断0,编中断服务程序的关键是:
1保护进入中断时的状态,并在退出中断之前恢复进入的状态。
2必须在中断程序中设定是否允许中断重入,即设置EX0位。
一般中断程序进入时应保护PSW、ACC以及中断程序使用但非其专用的寄存器,本实验中未涉及。
四、实验步骤
①P3.4连K1,P3.2连K2,P1.0—P1.6分别连到L1—L7,P1.7连SIN(电子音响输入端)。
②K1开关拨在上面,K2拨在上面。
③用连续方式从起始地址0580H开始运行程序(输入0580后按EXEC键),此时应在等待开工状态。
④K1拨至下面(显低电平),各道工序应正常运行。
⑤K2拨至下面(低电平),应有声音报警(人为设置故障)。⑥K2拨至上面(高电平),即排除故障,程序应从刚才报警的那道工序继续执行。
五、实验原理图
六、实验程序
ORG 0013H
LJMP HA2S3
ORG 0580H
HA2S: MOV P1,#07FH
ORL P3,#00H
HA2S1: JNB P3.4,HA2S1
ORL IE,#84H
ORL IP,#04H
MOV PSW,#00H
MOV SP,#53H
HA2S2: MOV P1,#07EH
ACALL HA2S7
MOV P1,#07DH
ACALL HA2S7
MOV P1,#07BH
ACALL HA2S7
MOV P1,#077H
ACALL HA2S7
MOV P1,#06FH
ACALL HA2S7
MOV P1,#05FH
ACALL HA2S7
MOV P1,#03FH
ACALL HA2S7
SJMP HA2S2
HA2S3: MOV B,R2
HA2S4: MOV P1,#07FH
MOV 20H,#0A0H
HA2S5: SETB P1.7
ACALL HA2S6
CLR P1.7
ACALL HA2S6
DJNZ 20H,HA2S5
CLR P1.7
ACALL HA2S6
JNB P3.2,HA2S4
MOV R2,B
RETI
HA2S6: MOV R2,#06H
ACALL DELAY
RET
HA2S7: MOV R2,#30H
ACALL DELAY
RET
DELAY: PUSH 02H
DELAY1: PUSH 02H
DELAY2: PUSH 02H
DELAY3: DJNZ R2,DELAY3
POP 02H
DJNZ R2,DELAY2
POP 02H
DJNZ R2,DELAY1
POP 02H
DJNZ R2,DELAY
RET
END
七、实验感想
通过本实验,我掌握了工业顺序控制程序的简单编程,中断的使用。学会了外部中断技术的基本使用方法,以及学会中断处理程序的编程方法。并按要求修改了程序代码,改变触发方式后也能正常工作。一开始程序中出现错误,在和同学商讨并结合书本后才找出问题所在。
实验三 定时器实验
一、实验目的
掌握单片机定时器/计数器的工作方式和编程原理。
二、实验内容
8253A的0通道工作在方式3产生方波。
三、实验步骤
①用插针把8253的CLK0插孔和分频输出端T2插孔相连。
②8253的GATE0插孔和+5V插孔相连。
③8253的片选信号8253CS和译码输出端Y4相连。
④KBB拨在左边OFF位置。
⑤用排线将SIO区的D0—D7连到BUS2区XD0—XD7。
⑥在“P.....”状态下,从起始地址08C0H开始连续运行程序,用示波器测8253的0通道输出端OUTO,应有方波产生。
四、实验原理图
五、实验程序
ORG 08C0H
L8253: MOV DPTR,#0C003H
MOV A,#36H
MOVX @DPTR,A
MOV DPTR,#0C000H
MOV A,#00H
MOVX @DPTR,A
MOV A,#10H
MOVX @DPTR,A
SJMP $
END
六、实验感想
通过本实验,我掌握单片机定时器/计数器的工作方式和编程原理。本次试验比较简单,通过8253A的0通道工作在方式3产生方波。只有在仿真时出现了一些小问题,我们需要不断发现,总结,运用,掌握一些技巧可以大大提高实验中连接电路的速度。
实验四:串行通信实验
一、实验目的
1掌握串行口工作方式的程序设计,掌握单片机通信程序编制方法。
2了解实现串行通信的硬环境,数据格式的协议,数据交换的协议。
二、实验内容
1利用8031单片机串行口,实现双机通信。
2本实验实现以下功能,将1号实验机键盘上键入的数字、字母显示到2号机的数码管上。
三、实验说明
1本实验系统中考虑用户可以方便使用串行口实现双机或和上位机通信,系统设计有用户专用串行接口,只要配上用户专用通信电缆线就可以实现和上位机通信,不影响监控系统和上位机的联机工作。J10就是用户专用串行接口,将J10用用户专用通信线连到上位机的串口上。注意不要和上位机系统用串行口冲突。
2实验时需将1号机8031串行接收信号线P3.0(RXD)连到2号机8031串行口发送信号线P3.1(TXD)。
四、实验步骤
1.按图连好线路。
2.在DVCC实验系统处于"P."状态下。
3.1号机输入四位起始地址0D00后,按EXEC键连续运行程序。
4.2号机输入四位起始地址0E30后,按EXEC键连续运行程序。
5.从1号机上的键盘输入数字键,会显示在2号机的数码管上。
五、实验原理图
六、实验程序
;系统晶振是 6.0 MHz
ORG 0E30H
START:
MOV SP,#60H
mov A,#02H
MOV R0,#79H
MOV @R0,A
INC R0
MOV A,#10H
MOV @R0,A
INC R0
MOV A,#01H
MOV @R0,A
INC R0
MOV A,#03H
MOV @R0,A
INC R0
MOV A,#00H
MOV @R0,A
INC R0
MOV A,#08H
MOV @R0,A
MOV A,#7EH
MOV DPTR,#1FFFH
MOVX @DPTR,A
MOV SCON,#50H ;串口 方式 1
MOV TMOD,#20H ;T1 方式 1
MOV TL1,#0CCH ;波特率 9600 的常数
MOV TH1,#0CCH
SETB TR1 ;开中断
CLR ET1
CLR ES
WAIT:
JBC RI,DIS_REC ;是否接收到数据
LCALL DISP ;
SJMP WAIT ;
DIS_REC:
MOV A,SBUF ;读串口接收到的数据
LCALL DATAKEY ;显示输入的数字(0-F)
DB 79H,7EH
AJMP WAIT
DATAKEY:MOV R4,A
MOV DPTR,#1FFFH
MOVX A,@DPTR
MOV R1,A
MOV A,R4
MOV @R1,A
CLR A
POP 83H
POP 82H
MOVC A,@A+DPTR
INC DPTR
CJNE A,01H,DATAKEY2
DEC R1
CLR A
MOVC A,@A+DPTR
DATAKEY1:PUSH 82H
PUSH 83H
MOV DPTR,#1FFFH
MOVX @DPTR,A
POP 83H
POP 82H
INC DPTR
PUSH 82H
PUSH 83H
RET
DATAKEY2:DEC R1
MOV A,R1
SJMP DATAKEY1
DISP: SETB 0D4H
MOV R1,#7EH
MOV R2,#20H
MOV R3,#00H
DISP1:
MOV DPTR,#DATACO
MOV A,@R1
MOVC A,@A+DPTR
MOV DPTR,#0FF22H
MOVX @DPTR,A
MOV DPTR,#0FF21H
MOV A,R2
MOVX @DPTR,A
LCALL DELAY
DEC R1
CLR C
MOV A,R2
RRC A
MOV R2,A
JNZ DISP1
CLR 0D4H
RET
DELAY: MOV R7,#03H
DELAY0: MOV R6,#0FFH
DELAY1: DJNZ R6,DELAY1
DJNZ R7,DELAY0
RET
DATACO: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,0BFH,0CH,89H,0DEH
END
七、实验感想
通过本次实验,我掌握了串行口工作方式的程序设计,掌握单片机通信程序编制方法。并了解了实现串行通信的硬环境,数据格式的协议,数据交换的协议。初步了解到实现两机通信的原理和方式,以及计算机的串行通信中数据位、校验位的关系。
单片机实验报告学生姓名学号专业指导教师学院信息与电气工程学院20xx年11月单片机实验报告实验一MCS51指令系统实验数据排序1实…
通信与信息工程学院20xx20xx学年第二学期实验报告课程名称单片机原理及应用专业班级学号学生姓名指导教师日期20xx年4月15日…
题目单片机组成原理实验报告学院计算机科学与工程学院专业信息安全姓名学号20xx年12月8日实验一输入输出接口编程一实验目的1掌握K…
51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机…
海南大学届单片机实验报告4份论文题目学生姓名学号所在院系专业班级授课教师完成时间蜂鸣器实验实验目的1熟悉实验板中蜂鸣器工作原理掌握…
时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。在学习单片机这门课程之前,就早早的听各种任课老师和学长学…
单片机实验心得体会时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。在学习单片机这门课程之前,就早早的听各…
通过今次单片机实训,使我对单片机的认识有了更深刻的理解。系统以51单片机为核心部件,利用汇编软件编程,通过键盘控制和数码管显示实现…
通过这次单片机实习,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断…
PIC单片机技术上机实验报告实验项目:定时/计数姓名:专业:班级:学号:学期:1314学年2学期20xx一、实验名称×××二、实验…
单片机原理实验报告实验一熟悉μ’nSP?IDE集成开发环境下C语言程序的编写【实验目的】1.熟悉μ’nSP?IDE集成开发环境的使…