FU
PIJ
P3.3/INTI
P1.4
ps.-oa
PI.5
P3.fi/ri
PI6
P3.6/VUR
PL?
P3.7/Rg
..J£_
ATO9C51
2S_
30,,3L
3fi
26
10
16
图3.3AT89C51引脚图
如果按功能划分,它由8个部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、I/O口(P0口、P1口、P2口、P3口)、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)的集中控制方式。
各功能部件的介绍:
1)数据存储器(RAM):
片内为128个字节单元,片外最多可扩展至64K字节。
2)程序存储器(ROM/EPROM):
ROM为4K,片外最多可扩展至64K。
3)中断系统:
具有5个中断源,2级中断优先权。
4)定时器/计数器:
2个
16位的定时器/计数器,具有四种工作方式。
5)串行口:
1个全双工的串
行口,具有四种工作方式。
6)特殊功能寄存器(SFR)共有21个,用于
对片内各功能模块进行管理、监控、监视。
7)微处理器:
为8位CPU,且
内含一个1位CPU(位处理器),不仅可处理字节数据,还可以进行位变量的处理。
8)四个8位双向并行的I/O端口,每个端口都包括一个锁存器、一个输出驱动器和一个输入缓冲器。
这四个端口的功能不完全相同。
A、P0口既可作一般I/O端口使用,又可作地址/数据总线使用;
B、P1口是一个准双向并行口,作通用并行I/O口使用;
C、P2口除了可作为通用I/O使用外,还可在CPU访问外部存储器时作高八
位地址线使用;
D、P3口是一个多功能口除具有准双向I/O功能外,还具有第二功能。
控制引脚介绍:
1)电源:
单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。
2)时钟引脚XTAL1、XTAL2时钟引脚外接晶体与片内反相放大器构
成了振荡器,它提供单片机的时钟控制信号。
时钟引脚也可外接晶体振荡器。
3)RST:
当振荡器运行时,在此引脚外加上两个机器周期的高电平将使单片机复位(RST)。
4)ALE:
当访问单片机外部存储器时ALE(地址锁存允许)输
出脉冲的负跳沿用于16位地址的底8位的锁存信号。
即使不访问外部锁存器,ALE端仍有正脉冲信号输出,此频率约为时钟振荡器的1/6。
但是每当访问外部数据存
储器时,在两个机器周期中ALE只出现一次,即丢失一个ALE脉冲。
因此,严格来说,用户不能用ALE做时钟源或定时。
ALE端可以驱动8个TTL负载5)
/PSEN(29脚):
此脚的输出是单片机访问外部程序存储器的读选通信号。
在由外部程序存储器取指令(或常数)期间,每个机器周期PSEN两次有效。
6)
/EA/VPP(31脚):
当EA端保持高电平时,单片机访问内部存储器,但在PC值超过0FFFH时,讲自动转向执行外部存储器内的程序。
当/EA保持低电平时,则只访问外部程序存储器,不管是否有内部存储器。
3.32DAC0832芯片
图3.4DAC0832芯片图
DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器。
DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。
DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。
所以这个芯片的应用很广泛,关于DAC0832的引脚功能如下:
D0~D7:
数字信号输入端。
ILE:
输入寄存器允许,高电平有效。
CS:
片选信号,低电平有效。
WR1:
写信号1,低电平有效。
XFER:
传送控制信号,低电平有效。
WR2:
写信号2,低电平有效。
IOUT1、IOUT2:
DAC电流输出端。
RfB:
是集成在片内的外接运放的反馈电阻。
V
ref:
基准电压(-10~10V)。
Vcc:
是源电压(+5~+15V)。
AGND:
模拟地NGND:
数字地,可与AGND接在一起使用。
proteus仿真图
[|>
・01
T卜
XPF
训■
15~-^
XTMZ
r^t
pi
9
・C2
a*
PUim)卩Hi加1
PO2fABZ阳抽口PD.4/jm«PQ^A»
PQ^jW卩酮呻
FSBALE
P2JM
PZ1M
PZ2TAHFZ2fAHF2.WAEP2^AQ
P2JS畑
PZ.7/AS
P3.1/MIpmMTC門寸ITT
F3.fcTnipismi旧颇HP3.7W
21-rj--s33s7f一卫1D11一
1G
创缈if匹罔H軍
5软件设计
5.1流程图的设计5.1.1方波程序流程图
此波形的实现只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。
这样才是一个方波,如果两个时间不相同,那就相当于一个脉冲波了•
5.1.2正弦波程序流程图
幵料
PO
DFT—DPTK+i
5.1.3三角波程序流程图
三角波的实现是设置一个初值,然后进行加数,同样是加到某个数之后再进行减数,减到初值之后就再返回到先前的操作。
H图1一1角波发空『程序流程图
5.1.4锯齿波的程序流程图
锯齿波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则
根据要求的频率来进行。
设置初值A
MOVDPTR
MOVX@DPTR,A
使A一直加一到
重新设置初值A
IOYO
EQU
3800H;
片选8255对应端口的始地址
MY8255_
_A
EQU
IOYO+00H*2
;8255
的A口地址
MY8255_
_B
EQU
IOYO+00H*2
;8255
的B口地址
MY8255_
_C
EQU
IOYO+00H*2
;8255
的C口地址
5.2程序清单
的控制寄存器地址
;8255
片选DAC0832寸应的端口地址
MY8255_MODEEQUIOYO+00H*2MY0832EQU3819H;
STACK1SEGMENTSTACK
DW256DUP⑺
STACK1ENDS
DDATASEGMENT
flagDB2DUP(?
);存放将要转换的波形的的类型,0FH代表直线
;0EH代表方波,0DH代表锯齿波;0BH代表三角波;07H
代表正弦波
TEMPDB2DUP(?
);存放三角波的走向,0代表上上升,1代表下降
BUF1DB00H,00H,0FFH,0FFH;矩形波的预置数
BUF4DB7FH,8CH,98H,0A4H,0B0H,0BCH,0C6H,0D0H
DB0DAH,0E2H,0E9H,0F0H,0F5H,0F9H,0FCH,0FEH
DB0FFH,0FEH,0FCH,0F9H,0F5H,0F0H,0E9H,0E2H
DB0DAH,0D0H,0C6H,0BCH,0B0H,0A4H,98H,8CH
DB7FH,73H,67H,5AH,4FH,43H,39H,2FH
DB25H,1DH,15H,0FH,0AH,05H,02H,01H
DB00H,01H,02H,05H,0AH,0FH,15H,1DH
DB25H,2FH,39H,43H,4FH,5AH,67H,73H
DDATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DDATA
START:
MOVAX,DDATA
MOVDS,AX
MOVSI,OFFSETflag;初始化输出的波形类型
MOVCL,00H
MOV[SI],CL
MOVDX,MY8255_MODE初始化8255的工作方式
延时并扫描
恢复各个寄存器的值
判断上次输出的波形是不是直线
如果是则继续,不是则把波形变换成直线
输出直线
返回扫描按键
rectangular:
MOVCL,01H;判断上次输出的波形是不是方波
CMP[SI],CL
JZNEXT1;如果是则继续,不是则把波形变换成方波
MOV[SI],CL
MOVDI,0000H
NEXT1:
MOVDX,MY0832
MOVBX,OFFSETBUF1;从内存娶数据并输出
MOVAL,[BX+DI]
OUTDX,AL
INCDI
CMPDI,03H;判断是否一个周期已经结束
JNATIA01MOVDI,00HTIAO1:
JMPDANDS;sawtooth:
MOVCL,02H;
CMP[SI],CL
JZNEXT2;
MOV[SI],CLMOVDI,0000HMOVAL,00H
NEXT2:
MOVDX,MY0832OUTDX,ALINCAL
INCALJMPDANDS;triangle:
MOVCL,03H;
CMP[SI],CL
JZNEXT3;
MOV[SI],CL
MOVAL,00H
MOVDI,OFFSETTEMP
MOVCL,00H;
MOV[DI],CL
返回扫描按键
判断上次输出的波形是不是锯齿波
如果是则继续,不是则把波形变换成锯齿波
输出波形
返回扫描按键
判断上次输出的波形是不是三角波
如果是则继续,不是则把波形变换成三角波
将三角波初始化为上升
输出波形
判断三角波是不是出于下降阶段
down如果为上升阶段,
如果上升到最顶端,则转变为下降阶段
如果下降到最低端,则转为上升阶段返回扫描按键
判断上次输出的波形是不是正弦波
JZNEXT4;如果是则继续,不是则把波形变换成正弦波
MOV[SI],CL
MOVDI,0000H
MOVAL,00H
NEXT4:
MOVDX,MY0832;从BUF4取数据并输出
MOVBX,OFFSETBUF4
MOVAL,[BX+DI]OUTDX,AL
INCDI
判断输出的中周期是否结束
返回扫描按键
CMPDI,40H
JNZTIAO4
MOVDI,00HTIAO4:
JMPDANDS
KEYSCANPROC;定义键盘扫描子程序
SCAN:
MOVDX,MY8255_A;读A口
INAL,DX
ANDAL,0FH
MOVAH,AL
CMPAH,0FH;判断是否有按键按下
JNZP1;如果没有按键按下,输出一条直线
JMPline
;下面的程序如果有按键按下,判断哪一个按键按下
P1:
CMPAH,0EH;判断第一个按键有没有按下
JNZP2;如果第一个按键按下,则输出矩形波
JMPrectangular
P2:
CMPAH,0DH;判断第二个按键有没有按下
JNZP3;如果第二个按键按下,则输出锯齿波
JMPsawtooth
P3:
CMPAH,0BH;判断第三个按键有没有按下
JNZP4;如果第三个按键按下,则输出三角波
JMPtriangle
CMPAH,0EH;判断第四个按键有没有按下
JNZP4;如果第四个按键按下,则输出正弦波
JMPsine
P4:
MOVAH,1;判断电脑键盘是否有按键按下
INT16H
JZSCAN;无按键按下则跳回继续扫描,有则退出
QUIT:
MOVAX,4C00H;结束程序退出
INT21H
KEYSCANENDP
DALLYPROCNEAR
软件延时子程序
将变量值CX,AX的值压入堆栈
延时
将变量AX,CX的值弹出堆栈
PUSHCX;
PUSHAX
MOVCX,0FFFHD1:
MOVAX,0FFFH
D2:
DECAX
JNZD2
LOOPD1
POPAX;
POPCX
RET
DALLYENDP
CODEENDS;结束代码段
ENDSTART
6课程设计体会
通过此次课程设计,使我更加扎实的掌握了有关单片机方面的知识,在设计过
程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。
实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。
最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。
这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在各种努力下,终于游逆而解。
在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可。
参考文献
1.顾德英.计算机控制技术(第二版).北京邮电大学出版社,2005
2.李顺增,吴国东,赵河明.微机原理及接口技术.机械工业出版社,2004
3徐爱华单片机应用技术教程机械工业出版社2003.7
4谢宜仁,谢炜,谢东辰单片机实用技术问答人民邮电出版社2003.2
5何立民单片机应用技术选编北京航空航天大学出版社1997.10
6潘永雄新编单片机原理与应用实验西安电子科技大学出版社2005.9
7夏继强,沈德金单片机实验与实践教程北京航空航天大学出版1999.12