微机原理与接口技术课程设计说明书

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

微机原理与接口技术课程设计
说明书
目录
一、设计目的 (3)
二、设计任务及要求 (3)
三、所需元件器材 (3)
四、最小系统原理图及其说明 (4)
1、最小系统原理图 (4)
2、扩展接口电路如下 (5)
3、最小系统PCB (5)
4、A T89S52引脚图及说明 (6)
4.1、主要性能 (6)
4.2、引脚说明 (7)
4.3、特殊功能寄存器 (9)
4.4、存储器结构 (12)
5、12MHz晶振作用 (12)
6、单片机晶振电路 (13)
六、软件编程 (13)
七、程序解释说明 (14)
说明书
一、设计目的
使大家对上学期学习的微机原理与接口技术进一步的掌握和巩固,掌握电路板的焊接技术,会利用软件实现简单的程序设计和调试。

二、设计任务及要求
该课题基本思路是利用最小系统的接口扩展成流水灯。

要求电路开启后,红黄蓝绿四种颜色的灯在时钟信号作用下按以下规律转换状态。

电路开启后,要求红黄蓝绿四种颜色的灯在脉冲作用下顺序,循环点亮。

三、所需元件器材
1、USB ISP下载线1根
2、实验板
3、A T89S52 1片U1
4、DIP40底座 1 个U1
5、1N4007 1个D1
6、30pF直插电容 2 个C1,C2
7、25V10uF电容 1 个C3
8、5.1K 9脚排阻 1 个R3
9、12MHz晶振,直插 1 个X
10、10K电阻 2 个R1,R2
11、1K电阻 1 个R4
12、LED(绿) 1 个LED
13、USB接口1个
14、IDC10接口 1 个PD1
15、40脚排针 1 条P0-P3
16、两脚按键 1 个S1
17、USB延长线1根用于提供板上的5V电源
18、杜邦排线20芯用于最小系统与扩展板连接
四、最小系统原理图及其说明
1、最小系统原理图
8051最小系统原理图
2、扩展接口电路如下
3、最小系统PCB
(2)8051最小系统PCB
从原理图中可以看出,如果要让接在P2.0口的LED1亮起来,那么只要把P2.0口的电平变为低电平就可以了;相反,如果要接在P2.0口的LED1熄灭,就要把P2.0口的电平变为高电平;同理,接在P2.1~P2.7口的其他7个LED的点亮和熄灭的方法同LED1。

因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。

在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。

4、AT89S52引脚图及说明
4.1、主要性能
1、与MCS-51单片机产品兼容;
2、8K字节在系统可编程Flash存储器;
3、1000次擦写周期;
4、全静态操作:0Hz-33MHz;
5、三级加密程序存储器;
6、32个可编程I/O口线;
7、三个16位定时器/计数器;
8、六个中断源;
9、全双工UART串行通道;
10、低功耗空闲和掉电模式;
11、掉电后中断可唤醒;
12、看门狗定时器;
13、双数据指针;
14、掉电标识符。

4.2、引脚说明
AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程
AT89S52引脚图DIP封装Flash 存储器。

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

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

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

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

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

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

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

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 输出缓冲器能驱动AT89S52引脚图PLCC封装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。

XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。

XTAL2:振荡器反相放大器的输出端。

4.3、特殊功能寄存器
特殊功能寄存器(SFR)的地址空间映象如表1所示。

AT89S52 特殊寄存器映象及复位值并不是所有的地址都被定义了。

片上没有定义的地址是不能用的。

读这些地址,一般将得到一个随机数据;写入的数据将会无效。

用户不应该给这些未定义的地址写入数据“1”。

由于这些寄存器在将来可能被赋予新的功能,复位后,这些位都为“0”。

定时器2 寄存器:寄存器T2CON 和T2MOD 包含定时器2 的控制位和状态位(如表2和表3所示),寄存器对RCAP2H和RCAP2L是定时器2的捕捉/自动重载寄存器。

中断寄存器:各中断允许位在IE寄存器中,六个中断源的两个优先级也可在IE中设置。

表2 T2CON:定时器/计数器2控制寄存器
T2CON 地址为0C8H 复位值:0000 0000B位可寻址
符号TF2 E XF2 RLCLK TCLK EXEN2 TR2 C/T2 CP/RL2
引脚7 6 5 4 3 2 1 0
TF2 定时器2 溢出标志位。

必须软件清“0”。

RCLK=1 或TCLK=1 时,TF2不
用置位。

EXF2 定时器2 外部标志位。

EXEN2=1 时,T2EX 上的负跳变而出现捕捉或重载时,EXF2 会被硬件置位。

定时器2 打开,EXF2=1 时,将引导CPU执行定
时器2 中断程序。

EXF2 必须如见清“0”。

在向下/向上技术模式(DCEN=1)下EXF2不能引起中断。

RLCLK 串行口接收数据时钟标志位。

若RCLK=1,串行口将使用定时器2 溢出脉冲作为串行口工作模式1 和3 的串口接收时钟;RCLK=0,将使用定时器1计数溢出作为串口接收时钟。

TCLK 串行口发送数据时钟标志位。

若TCLK=1,串行口将使用定时器2 溢出脉冲作
为串行口工作模式1 和3 的串口发送时钟;TCLK=0,将使用定时器1计数溢出作为串口发送时钟。

EXEN2 定时器2外部允许标志位。

当EXEN2=1时,如果定时器2没有用作串行时钟,T2EX(P1.1)的负跳变将引起定时器2 捕捉和重载。

若EXEN2=0,定时器2
将视T2EX端的信号无效
TR2 开始/停止控制定时器2。

TR2=1,定时器2开始工作
C/T2 定时器2 定时/计数选择标志位。

C/T2 =0,定时;C/T2 =1,外部事件计
数(下降沿触发)
CP/RL2 捕捉/重载选择标志位。

当EXEN2=1时,CP/RL2=1,T2EX出现负脉冲,会引起捕捉操作;当定时器2溢出或EXEN2=1时T2EX出现负跳变,都会出现自动重载操作。

CP/RL2=0 将引起T2EX 的负脉冲。

当RCKL=1或TCKL=1时,此标志位无效,定时器2溢出时,强制做自动重载操作。

双数据指针寄存器:为了更有利于访问内部和外部数据存储器,系统提供了两路16位数据指针寄存器:位于SFR中82H~83H的DP0和位于84H~85。

特殊寄存器AUXR1中DPS=0 选择DP0;DPS=1 选择DP1。

用户应该在访问数据指针寄存器前先初始化DPS至合理的值。

AUXR 地址:8EH 复位值:XXX00XX0B不可位寻址
DISALE
7 6 5 4 3 2 1 0
预留扩展用
DISALE ALE使能标志位
DISALE 操作方式
0 ALE 以1/6晶振频率输出信号
1 ALE 只有在执行MOVX 或MOVC指令时激活
DISRTO 复位输出标志位
DISRTO
0 看门狗(WDT)定时结束,Reset 输出高电平
1 Reset 只有输入
WDIDLE 空闲模式下WDT 使能标志位
WDIDLE
0 空闲模式下,WDT继续计数
1 空闲模式下,WDT停止计数
掉电标志位:掉电标志位(POF)位于特殊寄存器PCON的第四位(PCON.4)。

上电期间POF置“1”。

POF可以软件控制使用与否,但不受复位影响。

表3b AUXR1:辅助寄存器1
AUXR1 地址:A2H 复位值:XXXXXXX0B
不可位寻址
DPS
7 6 5 4 3 2 1 0
预留扩展用
DPS 数据指针选择位
DPS
0 选择DPTR寄存器DP0L和DP0H
1 选择DPTR寄存器DP1L和DP1H
4.4、存储器结构
MCS-51器件有单独的程序存储器和数据存储器。

外部程序存储器和数据存储器都可以64K寻址。

程序存储器:如果EA引脚接地,程序读取只从外部存储器开始。

对于89S52,如果EA 接VCC,程序读写先从内部存储器(地址为0000H~1FFFH)开始,接着从外部寻址,寻址地址为:2000H~FFFFH。

数据存储器:A T89S52 有256 字节片内数据存储器。

高128 字节与特殊功能寄存器重叠。

也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。

当一条指令访问高于7FH 的地址时,寻址方式决定CPU 访问高128 字节RAM 还是特殊功能寄存器空间。

直接寻址方式访问特殊功能寄存器(SFR)。

例如,下面的直接寻址指令访问0A0H(P2口)存储单元MOV 0A0H , #data使用间接寻址方式访问高128 字节RAM。

例如,下面的间接寻址方式中,R0 内容为0A0H,访问的是地址0A0H的寄存器,而不是P2口(它的地址也是0A0H)。

MOV @R0 , #data堆栈操作也是简介寻址方式。

因此,高128字节数据RAM也可用于堆栈空间。

5、12MHz晶振作用
晶振作用:给单片机正常工作提供稳定的时钟信号。

原理:在石英晶体的两个极板上加一个电场,晶片会产生械变形,对极板施加机械力使其变形,又会在极板上产生相应的电荷,这叫压电效应。

如果在两个极板上加上交变电压,晶片便会产生机械变形振荡,同时这种机械振荡还会产生交变的电场(比较微小),但是当外加交表电压的频率与晶片固有的频率(由其形状和尺寸决定)相等时,机械振动的幅度会加剧,产生交变电场也增大,叫做压电谐波。

即是去掉晶振,电路照样能振荡,并且如果把那两个电容改成可调电容的话也能得到想要的某个频率那还要晶振干什么,晶振、陶瓷谐振槽路、RC振荡器以及硅振荡器是适用于微控制器的四种时钟电源。

针对具体应用优化时钟源设计依赖于以下因素:成本、精度和环境参数。

RC振荡器能够快速启动,成本也比较低,但通常在整个温度和工作电源电压范围内精度较差,会在标称输出频率的5%至50%范围内变化:
但相对RC振荡器而言,基于晶振与陶瓷谐振槽路的振荡器通常能提供非常高的初始精度和较低的温度系数。

6、单片机晶振电路
MCS-51单片机内部的振荡电路是一个增益反相放大器,引线XYAL1和XTAL2分别为反相放大器的输入和内部时钟电路输入和来自反相放大器的输出,该反相放大器可以配置为片内振荡器。

单片机内部虽然有震荡电路,但要形成时钟,外部还需要附加电路石晶振荡和陶瓷振荡均可采用,有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,单必须保证脉冲的高低电平要求的宽度。

晶振电路如图4、5所示。

内部晶振电路
单片机的时钟产生方式有两种,分别为:内部时钟方式和外部时钟方式。

利用其内部的震荡电路XTAL1和XTAL2外接定时元件,内部震荡电路便产生自激震荡,用示波器可以观察到XTAL2的输出时钟信号。

在MCS-52中通常用内部时钟方式,也就是在XTAL1和XTAL2之间连接晶体振荡器与电容构成稳定的自激震荡器。

晶体和电容决定了单片机的工作精度为1微秒,晶体可在1.2-12MHZ之间选择。

MCS-51单片机在通常情况下,使用震荡频率为6MHZ的石英晶体,而12MHZ频率主要是在高速串行通信情况才使用,在这里我们用的是12MHZ的石英晶体。

对电容无严格要求,但它在取值对震荡频率的输出的稳定性、大小及震荡电路起震荡速度有点影响。

C1和C2可在10-100pF之间取值,一般情况下取30pF。

外部时钟方式是把外部震荡信号源直接接入XTAL1
或XTAL2。

由于XTAL2的逻辑电平不是TTL,所以还要接上拉电阻。

六、软件编程
#include <AT89X51.H>
unsigned char code
table[]={0x00,0xff,0x00,0xff,0x00,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0 xf7,0xfb,0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00,0 xff,0x00,0xff,0x00,0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7e,0x7d,0x7b,0x77,0x6f,0x5f,0x3f,
0x3e,0x3d,0x3b,0x37,0x2f,0x1f,0x1e,0x1d,0x1b,0x17,0x0f,0x0e,0x0d,0x0b,0x07,0x06,0x05,0x0 3,0x02,0x01,0x00,0xff,0x00,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0xbe,0xde,0xee,0 xf6,0xfa,0xfc,0x7c,0xbc,0xdc,0xec,0xf4,0xf8,0x78,0xb8,0xd8,0xe8,0xf0,0x70,0xb0,0xd0,0xe0,0x 60,0xa0,0xc0,0x40,0x80,0x00,0xff,0x00,0xff,0x00,0xff,0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0x bd,0xdb,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xc3,0x81,0x00, 0x81,0xc3,0xe7,0x00,0xff,0x00,0xff,0x00,0xff,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0 x55,0xff,0x00,0xff,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x00,0xff,0x00,0xff,0x0 0,0xff,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0xff,0x 00,0xff,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x00, 0xff,0x00,0xff,0x00,0xff,0x11,0x22,0x44,0x88,0x11,0x22,0x44,0x88,0x11,0x22,0x44,0x88,0x11, 0x22,0x44,0x88,0x11,0x22,0x44,0x88,0xff,0x00,0xff,0x88,0x44,0x22,0x11,0x88,0x44,0x22,0x11 ,0x88,0x44,0x22,0x11,0x88,0x44,0x22,0x11,0x88,0x44,0x22,0x11,0x00,0x00,0x00,0x00,0xff}; unsigned char dispcount;
void delay02s(void)
{
unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=30;j>0;j--)
for(k=248;k>0;k--);
}
void main(void)
{
while(1)
{
for(dispcount=0;dispcount<270;dispcount++)
{
P2=table[dispcount];
delay02s();
}
}
}
七、程序解释说明
#include <AT89X51.H> /*51系列单片机头文件*/
unsigned char code
table[]={0x00,0xff,0x00,0xff,0x00,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0 xf7,0xfb,0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00,0 xff,0x00,0xff,0x00,0xff,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7e,0x7d,0x7b,0x77,0x6f,0x5f,0x3f, 0x3e,0x3d,0x3b,0x37,0x2f,0x1f,0x1e,0x1d,0x1b,0x17,0x0f,0x0e,0x0d,0x0b,0x07,0x06,0x05,0x0 3,0x02,0x01,0x00,0xff,0x00,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x7e,0xbe,0xde,0xee,0
xf6,0xfa,0xfc,0x7c,0xbc,0xdc,0xec,0xf4,0xf8,0x78,0xb8,0xd8,0xe8,0xf0,0x70,0xb0,0xd0,0xe0,0x 60,0xa0,0xc0,0x40,0x80,0x00,0xff,0x00,0xff,0x00,0xff,0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0x bd,0xdb,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xc3,0x81,0x00, 0x81,0xc3,0xe7,0x00,0xff,0x00,0xff,0x00,0xff,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0 x55,0xff,0x00,0xff,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x00,0xff,0x00,0xff,0x0 0,0xff,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0xff,0x 00,0xff,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x24,0x92,0x49,0x00, 0xff,0x00,0xff,0x00,0xff,0x11,0x22,0x44,0x88,0x11,0x22,0x44,0x88,0x11,0x22,0x44,0x88,0x11, 0x22,0x44,0x88,0x11,0x22,0x44,0x88,0xff,0x00,0xff,0x88,0x44,0x22,0x11,0x88,0x44,0x22,0x11 ,0x88,0x44,0x22,0x11,0x88,0x44,0x22,0x11,0x88,0x44,0x22,0x11,0x00,0x00,0x00,0x00,0xff};
/*定义一维数组*/
unsigned char dispcount; /*定义无符号字符*/
void delay02s(void) /*延时函数*/
{
unsigned char i,j,k; /*定义无符号字符*/
for(i=20;i>0;i--)
for(j=30;j>0;j--)
for(k=248;k>0;k--); /*嵌套循环,共循环((248*2+3)*30+3))*20=299460us=200ms=0.2s*/
}
void main(void) /*主函数*/
{
while(1) /*无限循环*/
{
for(dispcount=0;dispcount<270;dispcount++) /*dispcount自加1*/
{
P2=table[dispcount]; /*将数组中的值取到P2口中,点亮对应的灯*/
delay02s(); /*调用延时函数*/
}
}
}
当上述程序编写好以后,我们需要使用keil编译软件对其编译,得到单片机所能识别的二进制代码,然后再用编程器将二进制代码烧写到A T89S52单片机中,最后连接好电路通电,我们就看到灯的“流水”效果了。

程序烧入过程如下:
1、将程序重命名为“XXX.C”
2、用KEIL创建新工程,命名“YYY”,选择型号“A TMEL-89C52”,右击“SOURCE GROUP 1”添加文件“XXX.C”关闭。

打开程序。

编译连接调试程序。

没有问题。

右击TARGET1,选择OPTIONS FOR TARGET "TARGET1",打开“OUTPUT”选项卡,勾选“CREATE HEX
3、安装USB-ASP驱动
4、打开A VR-FIGHTER软件。

芯片选择“A T89S52”,装FLASH,找到“YYY.HEX”文件。

点击编程,当右侧提示“芯片编程结束”。

完成烧入。

相关文档
最新文档