单片机作业项目(设计)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机作业项目(设计)
任务书




学生姓名:王锫锟,曾秋辉,林毅铭,
张泽标,颜明瑶
班级: 1班
专业:计算机通信
系别:电子系
指导教师:张召强
时间: 2010年12月
项目要求:
掌握单片机音频发声原理,掌握扬声器的驱动电路
使用I/O口输出音频脉冲,脉冲经放大滤波后,驱动扬声器发声。

要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用定时器定时这个半周期时间,每当定时到后就将输出脉冲的I/O口反相,然后重复定时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。

利用内部定时器使其工作在计数器模式,改变计数值TH0及TL0以产生不同的频率。

例如;频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计956μs/1μs=956,在每计数956次时将I/O反相,就可得到中音“哆”(523Hz)。

计数脉冲值与频率的关系公式如下:
N=Fi÷2÷Fr
N:计数值;Fi:内部计时一次为1μs,故其频率为1MHz;Fr:要产生的频率;
其计数值的求法:T=65536-N=65536-Fi÷2÷Fr
每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,表2.1为节拍与节拍码的对照。

如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可以求得节拍的时间。

假设1/4拍为1DELAY,则1拍应为4DELAY,依此类推。

所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如表2为1/4和1/8节拍的时间设定。

表1节拍与节拍码对照:
表2 各调1/4节拍的时间设定各调1/8节拍的时间设定:
建立音乐的步骤:
a. 先将乐谱的音符找出,然后由表3建立T值表的顺序。

b. 将T值表建立在TABLE1,构成发音符的计数值放在“TABLE”。

简谱码
(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的“TABLE”
处。

表3简谱对应的简谱码、T值、节拍数
电路原理图
元器件清单:
单片机:AT89S52(1个)晶振:12MHZ(1个)电容:33PF(2个),104nf(1个),10uf(1个)电阻:10k,100Ω 5.1k 若干个蜂鸣器:一个 LED:8个三极管:8550(1个)
器件详参:
AT89S52
主要性能:
与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz~33MHz 、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。

功能特性描述:
AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。

使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU 停止工作,允
许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

8 位微控制器8K 字节在系统可编程Flash AT89S52
P0 口:P0口是一个8位漏极开路的双向I/O口。

作为输出口,每位能驱动8个TTL逻辑电平。

对P0端口写“1”时,引脚用作高阻抗输入。

当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。

在这种模式下,P0不具有内部上拉电阻。

在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。

程序校验时,需要外部上拉电阻。

P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。

对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2 的触发输入(P1.1/T2EX),具体如下表所示。

在flash编程和校验时,P1口接收低8位地址字节。

引脚号第二功能
P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方
向控制)
P1.5 MOSI(在系统编程用)
P1.6 MISO(在系统编程用)
P1.7 SCK(在系统编程用)
P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O
口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。

对P2 端
口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口
使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原
因,将输出电流(IIL)。

在访问外部程序存储器或用16位地
址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。

在这种应用中,P2 口使用很强的内部上拉发送1。

在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。

在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。

P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4 个TTL 逻辑电平。

对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。

在flash编程和校验时,P3口也接收一些控制信号。

端口引脚第二功能
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INTO(外中断0)
P3.3 INT1(外中断1)
P3.4 TO(定时/计数器0)
P3.5 T1(定时/计数器1)
P3.6 WR(外部数据存储器写选通)
P3.7 RD(外部数据存储器读选通)
此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。

RST——复位输入。

当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。

ALE/PROG——当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。

一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。

要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。

对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。

该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。

此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。

PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。

EA/VPP——外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。

需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。

如EA端为高电平(接Vcc端),CPU则执行内部程序存储器
的指令。

FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,
当然这必须是该器件是使用12V编程电压Vpp。

单片机各I/O口功能定义及说明:P1.0音频输出
程序流程图:
源程序(带注释)及程序说明:
使用单片机使蜂鸣器发声,编程产生一段《祝你平安》的音乐。

ORG 0000H
LJMP START
ORG 000BH
INC 20H ;中断服务,中断计数器加1
MOV TH0,#0D8H
MOV TL0,#0EFH ;12M晶振,形成10毫秒中断
RETI
START: MOV SP,#50H
MOV TH0,#0D8H
MOV TL0,#0EFH
MOV TMOD,#01H
MOV IE,#82H
MUSIC0: NOP
MOV DPTR,#DAT ;表头地址送DPTR
MOV 20H,#00H ;中断计数器清0
MOV B,#00H ;表序号清0
MUSIC1: NOP
CLR A
MOVC A,@A+DPTR ;查表取代码
JZ END0 ;是00H,则结束
CJNE A,#0FFH,MUSIC5
LJMP MUSIC3
MUSIC5: NOP
MOV R6,A
INC DPTR
MOV A,B
MOVC A,@A+DPTR ;取节拍代码送R7
MOV R7,A
SETB TR0 ;启动计数
MUSIC2: NOP
CPL P3.3 ;音频输出端口
MOV A,R6
MOV R3,A
LCALL DEL
MOV A,R7
CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否? 不等,则继续循环
MOV 20H,#00H ;等于,则取下一代码
INC DPTR
LJMP MUSIC1
MUSIC3: NOP
CLR TR0 ;休止100毫秒
MOV R2,#0DH
MUSIC4: NOP
MOV R3,#0FFH
LCALL DEL
DJNZ R2,MUSIC4
INC DPTR
LJMP MUSIC1
END0: NOP
MOV R2,#64H ;歌曲结束,延时1秒后继续
MUSIC6: MOV R3,#00H
LCALL DEL
DJNZ R2,MUSIC6
LJMP MUSIC0
DEL: NOP
DEL3: MOV R4,#02H
DEL4: NOP
DJNZ R4,DEL4
NOP
DJNZ R3,DEL3
RET
NOP
DAT:
DB 26H,20H,20H,20H,20H,20H,26H,10H,20H,10H,20H,80H,26H,20H,30H,20H DB 30H,20H,39H,10H,30H,10H,30H,80H,26H,20H,20H,20H,20H,20H,1CH,20H DB 20H,80H,2bH,20H,26H,20H,20H,20H,2BH,10H,26H,10H,2BH,80H,26H,20H DB 30H,20H,30H,20H,39H,10H,26H,10H,26H,60H,40H,10H,39H,10H,26H,20H DB 30H,20H,30H,20H,39H,10H,26H,10H,26H,80H,26H,20H,2bH,10H,2BH,10H DB 2BH,20H,30H,10H,39H,10H,26H,10H,2BH,10H,2BH,20H,2BH,40H,40H,20H DB 20H,10H,20H,10H,2bH,10H,26H,30H,30H,80H,18H,20H,18H,20H,26H,20H DB 20H,20H,20H,40H,26H,20H,2BH,20H,30H,20H,30H,20H,1CH,20H,20H,20H DB 20H,80H,1CH,20H,1CH,20H,1CH,20H,30H,20H,30H,60H,39H,10H,30H,10H DB 20H,20H,2bH,10H,26H,10H,2BH,10H,26H,10H,26H,10H,2BH,10H,2BH,80H DB 18H,20H,18H,20H,26H,20H,20H,20H,20H,60H,26H,10H,2BH,20H,30H,20H DB 30H,20H,1CH,20H,20H,20H,20H,80H,26H,20H,30H,10H,30H,10H,30H,20H DB 39H,20H,26H,10H,2BH,10H,2BH,20H,2BH,40H,40H,10H,40H,10H,20H,10H DB 20H,10H,2bH,10H,26H,30H,30H,80H,00H
END
项目调试说明:
1、硬件调试
在样机加电之前,首先用万用表等工具,根据硬件电器原理图和装配图仔细检查样机线路的正确性,并核对元器件的型号、规格和安装是否符合要求。

应特别注意电源的走线,防止电源之间的短路和极性错误,并重点检查扩展系统总线(地址总线、数据总线和控制总线)是否存在相互间的短路或与其它信号线的短路。

第二步是加电后检查各个插件上引脚的电位,仔细测量各点电位是否正常,尤其应注意单片机插座上的各点电位,若有高压,联机时将会损坏仿真器。

第三步是在不加电情况下,除单片机以外,插上所有的元器件,最后用仿真适配器将样机的单片机插座和仿真器的仿真接口相连,为联机调试做准备。

2、软件调试
计算程序的调试方法
计算程序的错误是一种静态的固定的错误,因此主要用单拍或断点运行方式来调试。

将数据写入计算程序的参数缓冲单元,然后从计算程序开始运行到结束,运行的结果和正确数据比较,如果对有的测试数据进行测试,都没有发生错误,则该计算程序调试成功;如果发现结果不正确,改用单步运行方式,即可检查出错误所在。

计算程序的修改视错误性质而定。

若是算法错误,那是根本性错误,应重新设计该程序;若是局部的指令有错,修改即可。

如果用于测试的数据没有全部覆盖实际计算的原始数据的类型,调试没有发现错误可能在系统运行过程中暴露出来。

在完成了各个模块程序(或各个任务程序)的调试工作以后,便可进行系统的综合调试。

综合调试一般采用全速断点运行方式,这个阶段的主要工作社排除系统中遗留的错误以提高系统的动态性能和精度。

在综合调试的最后阶段,应在目标系统的晶振频率工作,使系统全速运行目标程序,实现了预定功能技术指标后,便可将软件固化,然后在运行固化的目标程序,成功后目标系统便可脱机运行。

一般情况下,这样一个应用系统就算研制成功了。

相关文档
最新文档