版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机软件设计目录程序的编写、编译KeilC环境设置创建项目1、基于AT89C52处理器2、新建源代码文件,并保存命名xxx.c3、右键点击“SourceGroupxx”将.c“AddFilestoGroup……”程序的编写、编译程序编写:Demo示例/*功能:IO口操作,点亮一个LED*/#include<reg52.h>//包含头文件,包含特殊功能寄存器的定义sbitLED=P0^0;//用sbit关键字定义LED到P0.0端口/*主函数*/voidmain(void){//此方法使用bit位对单个端口赋值LED=1;//将P0.0口赋值1,对外输出高电平LED=0;//将P0.0口赋值0,对外输出低电平,此时点亮了LEDwhile(1)//主循环
{//主循环中添加其他需要一直工作的程序
}}程序的编写、编译KeilC环境设置Target:设置时钟晶振为12MHzOutput:选中CreateHEXFile选项,
编译后会生成Hex文件,
用于下载到单片机中。Debug:左侧配置软件仿真模式;
右侧配置硬件调试器仿真。(默认即可)程序的编写、编译程序编译编译查看编译输出结果目录程序的下载STC89C52STC
ISP下载器USB转串口可代替MAX232,给51单片机下载程序引出接口分别为:+5V,+3.3V,GND,TXD,RXD.(如果把(GND)接到设备的有电压的针脚上,加电可能会烧毁)需要安装USB转串口驱动,通常为340芯片组下载软件:STC-ISP-V4.83程序的下载STC89C52冷启下载:1、使用下载软件发送下载命令2、给STC单片机上电(如果之前已经上电,就要断电再上电)3、STC单片机才能进入到下载状态不能下载?检查线路是否接错ISP接口电路与下载器接口电路电平冲突下载时下载速度太快程序的下载AT89S52USBASP/ISP通常为免驱型请实用带保险的USB下载器,以便保护电脑U口程序的下载AT89S52USBASP/ISP下载软件:AVRfighterProgisp目录基础程序设计单片机程序框架while()主循环延迟函数IO操作中断操作基础电路模块控制蜂鸣器控制独立按键输入继电器控制步进电机控制数码管显示LCD1602显示无单片机编程基础的同学,可简单理解,采用模块化、积木式搭建单片机系统代码基础程序设计程序框架单片机程序主体结构:While()大循环轮询式执行各任务外部中断外部触发中断,如按键,执行某任务定时器中断
固定间隔时间执行某任务#include<reg52.h>main(){//首先进行IO、中断、定时器工作模式初始化
while(1){//轮询式执行任务
}}voidISR_Key(void)interrupt0using1{//执行外部中断处理任务}voidTimer0_isr(void)interrupt1using1{//执行定时器中断处理任务}基础程序设计while()主循环while(1)//主循环
{//主循环中添加需要一直工作的任务程序//任务一:led闪烁LED0=0;//将P0.0口赋值0,对外输出低电平
Delay(10000);//调用延时程序;用于改变闪烁频率
LED0=1;//将P0.0口赋值1,对外输出高电平
Delay(10000);//任务二://任务三:}/*延时函数,含有输入参数unsignedintt,其值的范围是0~65535*/voidDelay(unsignedintt){while(--t);}基础程序设计延迟函数估算延迟函数/*uS延时函数,参数unsignedchart,其值范围是0~255。晶振12M。大致延时长度如下T=t
x
2+5uS*/voidDelayUs2x(unsignedchart){
while(--t);}/*mS延时函数,参数unsignedchart,范围是0~255。晶振12M*/voidDelayMs(unsignedchart){
while(t--)
{//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}}精确延时请使用汇编机器周期指令周期晶振频率基础程序设计IO操作对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的何种控制,都是通过I/O口进行的。51单片机总共有P0、P1、P2、P3四个8位双向输入输出端口,每个端口都有锁存器(即专用寄存器P0~P3)、输出驱动器和输入缓冲器。每个IO口有一个IO口寄存器Px,而且这个寄存器可以位寻址Px.n(定义详见reg51.h或reg52.h)基础程序设计IO操作1、当P0作为I/O口使用时,特别是作为输出时,输出级属于开漏电路,接拉电流负载时必须外接上拉电阻才会有高电平输出;如果作为输入,必须先向相应的锁存器写“1”,才不会影响输入电平。2、P1、P2
和P3
口为准双向口,
在内部差别不大,
但使用功能有所不同。
P3第二功能各引脚功能定义:P3.0:RXD串行口输入P3.1:TXD串行口输出P3.2:INT0外部中断0输入P3.3:INT1外部中断1输入P3.4:T0定时器0外部输入P3.5:T1定时器1外部输入P3.6:WR外部写控制P3.7:RD外部读控制
P1口是用户专用
8
位准双向I/O口,具有通用输入/输出功能,
每一位都能独立地设定为输入或输出。当有输出方式变为输入方式时,
该位的锁存器必须写入“1”,
然后才能进入输入操作。
P2口是
8
位准双向I/O口。外接I/O设备时,
可作为扩展系统的地址总线,输出高8位地址,
与P0
口一起组成
16
位地址总线。
基础程序设计IO操作示例#i
nclude<reg52.h>
sbit
bv=P2^0;//定义位变量,关联P2.0管脚。sbit是数据类型
int
main(void)
{
unsigned
char
pv;
//位操作,以P2口的第0位为例:
bv=0;//直接对P2口的第0位管脚输出低电平
bv=1;//
直接对P2口的第0位管脚输出高电平
//总线操作输出数据,以P2口为例:
P2=0xaa;//直接赋值,P2口输出数据0xaa
//总线操作读取数据,以P2口为例:
pv=P2;//直接读取P2口的数据放到pv变量
return
0;
}基础程序设计中断8051:5个中断源8052:6个中断源(+T2)中断号
优先级中断源中断入口地址01高外部中断0
0003H12定时器0000BH23外部中断10013H34定时器10018H45低串口中断0023HC语言程序中可不关心该地址基础程序设计中断主要与中断程序控制相关的寄存器:
中断允许控制寄存器IE定时器控制寄存器TCON串口控制寄存器SCON中断优先控制寄存器IP定时器工作方式控制寄存器TMOD定时器初值赋予寄存器(TH0/TH1,TL0/TL1)基础程序设计中断1.中断允许控制寄存器IE:EX0(EX1):外部中断允许控制位
EX0=1外部中断0开关闭合
//开外部0中断
EX0=0外部中断0开关断开ET0(ET1):定时中断允许控制位
ET0=1
定时器中断0开关闭合
//开定时器中断0
ET0=0定时器中断0开关断开
ES:串口中断允许控制位
ES=1串口中断开关闭合
//开串口中断
ES=0串口中断开关断开EA:总中断控制
(EA=1:开总中断)基础程序设计中断2.定时器控制寄存器TCON
//控制外部中断和定时器中断外部中断:
IE0(IE1):外部中断请求标志位
当外部中断INT0(INT1)引脚出现有效的请求信号(接入低电平或下降沿信号时),此位由单片机自动置1,cpu开始响应,处理中断,而当入中断程序后由单片机自动置0.
IT0(IT1):外部中断触发方式控制位
//选择有效信号
IT0(IT1)=1:脉冲触发方式,下降沿有效。
IT0(IT1)=0:电平触发方式,低电平有效。基础程序设计中断2.定时器控制寄存器TCON
//控制外部中断和定时器中断定时器中断:
TF0(TF1):定时器/计数器溢出中断标志位
当定时器、计数器计数溢出的时候,此位由单片机自动置1,cup开始响应,处理中断,而当进入中断程序后由单片机自动置0.
TRO(TR1):定时器/计数器启动位
TR0(TR1)=1;启动定时器/计数器
TR0(TR1)=0;关闭定时器/计数器基础程序设计中断3.定时器工作方式TMOD低半字节(D0/D1/D2/D3)用来控制定时器/计数器0高半字节(D4/D5/D6/D7)用来控制定时器/计数器1GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1C/T=0时为定时功能,C/T=1时为计数功能(引脚外部脉冲)M0、M1——方式选择功能基础程序设计中断4.定时器初值TL0/TH0(以12M晶振,工作方式1,16位计数器为例,定时Xus)
1.时钟周期的时间t=1/12M=1/12us
2.机器周期的时间T=12*1/12=1us
3.每机器周期计数器+1,所以计数器+1经过时间为1us
16为计数器要全部置1(即达到65535)+1后,溢出才会触发中断,所以初值=(65536-X)
4.将初值转化为16进制码,分别付给TH0和TL0
eg:所定时间5ms;初值=(65536-5000)=60536=EC78;TH0=0XEC;TL0=0X78;程序中常用赋初值算法:
TH0=(65536-20000)/256;
TL0=(65536-20000)%256;基础程序设计中断5.串口控制寄存器SCON定时器中断:TI:串行口发送中断标志位
当单片机串口发送完一帧数据后,此位由单片机自动置1,而当进入中断服务程序后是不会自动清0的,
必须由用户在中断服务中用软件清0.
RI:串行口接收中断标志位
当单片机串口接收完一帧数据后,此位由单片机自动置1,而当进入中断服务程序后是不会自动清0的,
必须由用户在中断服务软件中用软件清0.
基础程序设计定时器中断示例voidInit_Timer0(void){TMOD|=0x01; //使用模式1,16位定时器,“|”可使多个定时器互不影响TH0=(65536-60000)/256;
//赋初值(定时60ms)
TL0=(65536-60000)%256;EA=1;//总中断打开
ET0=1;//定时器中断打开
TR0=1;//定时器开关打开}main(){Init_Timer0();while(1);}/*定时器中断子程序*/voidTimer0_isr(void)interrupt1using1{TH0=(65536-60000)/256;
//重新赋值
TL0=(65536-60000)%256;LED=~LED;//指示灯反相,可以看到闪烁}Demo:定时器中断0基础程序设计外部中断示例功能:通过中断接口P3.2连接的独立按键测试,P0口的LED灯反向,边沿触发main(){
P0=0xaa;//P0口初始值
EA=1;//全局中断开
EX0=1;//外部中断0开
IT0=1;//边沿触发(IT0=0电平触发)
while(1)
{
//在此添加其他程序
}}/*外部中断程序*/voidISR_Key(void)interrupt0using1{
P0=~P0;//进入中断程序执行程序,//此时可以通过EA=0指令暂时关掉中断}串口中断以后再介绍Demo:外部中断0边沿触发基础程序设计发光二极管LED灌电流——拉电流??控制负载,尽量使用低电平有效(上电初始化,所有IO为高电平)单个LED控制sbitled0=P1^0;led0=0;//开灯led0=1;//关灯整个P1口控制:流水灯unsignedchartmp=0xfe;while(1){P1=tmp;delay();tmp=((tmp<<1)|1);if(tmp==0xff)tmp=0xfe;}低电平有效Demo:LED流水灯基础程序设计蜂鸣器控制程序9013驱动高电平有效sbitbeer=P0^4;beer=0;//鸣叫beer=1;//关闭通过不同的间隔时间,可以达到类似倒车雷达的效果voidbeer_freq(unsignedchart){beer=!beer;//鸣叫or关闭
DelayMs(t);}Demo:蜂鸣器基础程序设计独立按键sbitKEY=P3^2;//定义按键输入端口sbitLED=P0^0;//定义led输出端口voidmain(void){KEY=1; //按键输入端口电平置高,输入模式while(1) //主循环
{
if(!KEY) //如果检测到低电平,说明按键按下,led点亮
LED=0;
else
LED=1; //如果按键未按下led灭
//上述4句可以用一句替代LED=KEY;//主循环中添加其他需要一直工作的程序
}}这里未考虑软件去抖查询方式亦可用外部中断Demo:独立按键控制LED基础程序设计继电器控制程序低电平有效sbitrelay=P0^0;relay=0;//常开闭合,外设接通电源relay=1;//常开断开Eg:按键S1控制继电器模块(低电平有效)sbitKEY=P3^2;//定义按键输入端口sbitRELAY=P0^0;//定义继电器控制端口voidmain(void){KEY=1;//按键输入端口电平置高
while(1)//主循环
{//按键按下,继电器开关切换if(!KEY)RELAY=!RELAY;}}基础程序设计步进电机Uln2003驱动步进电机1、拍数:电机转过一个齿距角所需脉冲数,以四相电机为例:四相四拍运行方式:AB-BC-CD-DA-AB四相八拍运行方式:A-AB-B-BC-C-CD-D-DA-A2、步距角:对应一个脉冲信号,电机转子转过的角位移用θ表示。减速电机28BYJ-48-5步进角度:5.625x1/64减速比:1/64***因为这个是带减速齿轮的(减速比1/64),最后输出轴上步进角是5.625/64=0.08789度。***对于电机,是64个脉冲为一圈。对于输出轴,是4096个脉冲为一圈(64×64)。电机转64圈,输出轴转1圈。实测512*4为一圈?基础程序设计步进电机接线方式:IN1----P00IN2----P01IN3----P02IN4----P03#defineMotorDataP0//步进电机控制接口定义ucharphasecw[4]={0x08,0x04,0x02,0x01};//正转电机导通相序D-C-B-Aucharphaseccw[4]={0x01,0x02,0x04,0x08};//反转电机导通相序A-B-C-Ducharspeed_delay;//顺时针转动voidMotorCW(void){uchari;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全肺切除术后的护理要点
- 成人肠造口护理
- 上杭八年级地理专项训练卷
- 急性ST段抬高心肌梗死PDCA管理
- 2025年中山市港口城市建设有限公司招聘真题
- 2025年枣庄科技职业学院招聘考试真题
- 2025年洛阳汝阳县城镇公益性岗位招聘考试真题
- 2025年崇左市龙州县消防救援局政府专职消防队员招聘真题
- 2026江苏省淮安市市属国有企业春季校园招聘8人考试备考题库及答案解析
- 2026年北京市卫生健康系统事业单位人员招聘考试备考试题及答案详解
- 《水利水电工程隧洞超前地质预报规程》
- 中华人民共和国保守国家秘密法实施条例培训课件
- 预制箱梁分包合同范本
- 血液透析的人体容量监测仪课件
- 教你填《广东省普通高中学生档案》精编版
- 苏教版《小学科学课程标准》电子版
- 中药炮制工考试题与答案
- 2023-2024学年云南省楚雄市小学语文 2023-2024学年三年级语文期末试卷期末高分试卷
- 系统解剖脊神经
- GB/T 28775-2021同步带传动T型梯形齿同步带轮
- GB/T 20641-2006低压成套开关设备和控制设备空壳体的一般要求
评论
0/150
提交评论