时钟电路基本程序设计.ppt_第1页
时钟电路基本程序设计.ppt_第2页
时钟电路基本程序设计.ppt_第3页
时钟电路基本程序设计.ppt_第4页
时钟电路基本程序设计.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MCS-51单片机基本程序设计 延时C语言程序设计 中断C语言程序设计 动态显示C语言程序设计,编程要求:控制一个信号灯(P1.0口)闪烁程序,一、延时C语言程序设计,/功能:控制一个信号灯闪烁程序 #include sbit P1_0=P10; /定义位名称 void delay(unsigned char i); /延时函数声明 void main() /主函数 while(1) P1_0=!P1_0; delay(10); /调用延时函数,实际变量为10 ,/函数功能:实现软件延时 /形式参数:unsigned char i; /i控制空循环的外循环次数,共循环i*255次 /返回值:无 void delay(unsigned char i)/延时函数,无符号字符型变量i为形式参数 unsigned char j,k; /定义无符号字符型变量j和k for(k=0;ki;k+) /双重for循环语句实现软件延时 for(j=0;j255;j+); ,/设单片机的fosc=6MHz用定时器T0的方式0编/程,在P1.0脚上输出周期为1ms的方波。,解: 1)初值计算 TH0=F8H,TL0=06H 2)工作方式控制字TMOD=00H(复位时自动清0),ORG 0000H AJMP MAIN MAIN: MOV TL0,#06H ;预置初值 MOV TH0,#0F8H SETB TR0 ;启动T0 LOOP1: JBC TF0,LOOP2 ;计数溢出否 SJMP LOOP1 LOOP2: MOV TL0,#06H ;重置初值 MOV TH0,#0F8H CLR TF0 (为什么?) CLP P1.0 ;取反 SJMP LOOP1 ;重复循环,/用C语言实现上述要求 #include”reg51.h” Sbit P1_0=P10 Void delay500us(); void main() for( ; ; ) P1_0=!P1_0; delay500us; ,/用T0方式0实现500us延时 void delay500us() unsigned char i; TMOD=0x00; / 置T0为工作方式0 TH0=0xF8; / 设置定时器初值 TL0=0x06; TR0=1; / 启动T1 while(!TF0); / 查询计数是否溢出,即定时500us时间到,TF0=1 TF0=0; / 500us定时时间到,将定时器溢出标志位TF0清零 ,/用T1方式0实现1秒延时函数,设fosc=12MHz void delay1s() unsigned char i; TMOD=0x00; / 置T1为工作方式0 for(i=0;i0xc8;i+) / 设置200次循环次数 TH1=0x63; / 设置定时器初值 TL1=0x18; TR1=1; / 启动T1 while(!TF1); / 查询计数是否溢出,即定时5ms时间到,TF1=1 TF1=0; / 5ms定时时间到,将定时器溢出标志位TF1清零 ,/用定时器工作方式2实现的1秒延时函数如下: void delay1s() unsigned int i; / i不能定义成unsigned char(为什么?) TMOD=0x20; / 设置T1为方式2 TH1=6; / 设置定时器初值,放在for循环之外(?) TL1=6; for(i=0;i4000;i+) / 设置4000次循环次数 TR1=1; / 启动T1 while(!TF1); / 查询计数是否溢出,即定时250s时间到,TF1=1 TF1=0; / 250s定时时间到,将定时器溢出标志位TF1清零 ,中断处理过程 中断响应过程就是自动调用并执行中断函数的过程。 C51编译器支持在C源程序中直接以函数形式编写中断服务程序。常用的中断函数定义语法如下: void 函数名() interrupt n 其中n为中断类型号,C51编译器允许031个中断,n取值范围031。下面给出了8051控制器所提供的5个中断源所对应的中断类型号和中断服务程序入口地址: 中断源 n 入口地址 外部中断0 0 0003H 定时/计数器0 1 000BH 外部中断1 2 0013H 定时/计数器1 3 001BH 串行口 4 0023H,中断C语言程序设计举例: 可控霓虹灯控制 要求:正常情况下8个LED依次点亮,循环显示,时间间隔1s。按键按下后,8个LED同时亮灭一次,时间间隔为0.5s。用T1、工作方式1编制延时程序,按键动作采用外部中断INT0实现。,/函数功能:用T1的方式1编制0.5秒延时程序,假定系统采用12MHz晶振,/定时器1、工作方式1定时50ms,再循环10次即可定时到0.5秒 #include void delay0_5s() unsigned char i; for(i=0;i0x0a;i+) / 设置10次循环次数 TH1=0x3c; / 设置定时器初值 TL1=0xb0; TR1=1; / 启动T1 while(!TF1); / 查询计数是否溢出,即定时50ms时间到,TF1=0 TF1=0; / 50ms定时时间到,将定时器溢出标志位TF1清零 ,/函数名:int_0 /函数功能:外部中断0中断函数,当CPU响应外部中 /断0的中断请求时,自动执行该函数,实现八个信 /号灯闪烁 void int_0() interrupt 0 /外部中断0的中断号为0 P1=0x00; /熄灭八个信号灯 delay0_5s(); /调用0.5秒延时函数 P1=0xff; /点亮八个信号灯 delay0_5s(); /调用0.5秒延时函数 ,void main() /主函数 unsigned char i,w; EA=1; / 打开中断总允许位 EX0=1; / 打开外部中断0允许位 IT0=1; / 设置外部中断为边沿(下降沿)触发方式 TMOD=0x10; / 设置T1为工作方式1 while(1) w=0x01; / 显示码初值为01H for(i=0;i8;i+) P1=w; / w取反后送P1口,点亮相应LED灯 w=1; / 点亮灯的位置移动 delay_t(2); / 调用延时函数delay_t(),实际参数为2,延时1秒 ,/修改以上程序,使系统每隔20s中断闪烁一次: /函数名:int_3 /函数功能:定时器1中断函数,当CPU响应该中断请求时,自动执行该函数,实现八个信号灯闪烁 /形式参数:无 /返回值:无 void int_3() interrupt 3 /定时器1中断号为3 P1=0x00; /熄灭八个信号灯 delay20s(); /调用0.5秒延时函数 P1=0xff; /点亮八个信号灯 delay20s(); /调用0.5秒延时函数 ,/以定时器T1写一个延时20s的子函数(略) void main() /主函数 unsigned char i,w; EA=1; / 打开中断总允许位 EX0=1; / 打开外部中断0允许位 IT0=1; / 设置外部中断为边沿(下降沿)触发方式 ET1=1; /设置定时器1中断允

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论