郭天祥单片机编程100例程序及随笔3——定时器编程
2018-03-14 12:04
337 查看
1.五个知识点:
1.1设置中断的流程:
1.1.1主函数设置初始化
1.1.2中断服务程序(由用户自己编写),设置要做的事情,但不可以放太多。
1.2主函数的设置(定时器初始化)
举例:
或者使用void init_interrupt(){}也可以,不一定要直接放在总程序里面。
设置流程如下:
注:关于TMOD:
1.3中断子函数
需要跟着时间改变而进行改变的对象,都要用定器去辅助实现他们。
可由用户自己设置,格式如下:
void 函数名 interrupt m [using n]
说明:interrupt m的m为中断号。using n 的n的意思大概是当有紧急的事情需要cpu处理时,现有程序可以存入指定的寄存器组,猜测这个n是寄存器组号。
在中断服务程序中,一定要记得重装初值,否则每次计时的时间就会不对。
1.4 uchar与uint的区别
uchar是无符号整型,8Bit,最大到255.也可以写作 u8;
uint是16bit最大到65535.也可以写作 u16;
一般数字较小采用uchar来定义,可以节省空间。
1.5 数码管分位显示可以采用延时函数。
例如:
2.中断相关练习程序如下:
1.1设置中断的流程:
1.1.1主函数设置初始化
1.1.2中断服务程序(由用户自己编写),设置要做的事情,但不可以放太多。
1.2主函数的设置(定时器初始化)
举例:
void main() { TMOD = 0x01; TH0 = (65536-46082)/256; TL0 = (65536-46082)%256; EA = 1; ET0 = 1; TR0 = 1; }
或者使用void init_interrupt(){}也可以,不一定要直接放在总程序里面。
设置流程如下:
注:关于TMOD:
1.3中断子函数
需要跟着时间改变而进行改变的对象,都要用定器去辅助实现他们。
可由用户自己设置,格式如下:
void 函数名 interrupt m [using n]
说明:interrupt m的m为中断号。using n 的n的意思大概是当有紧急的事情需要cpu处理时,现有程序可以存入指定的寄存器组,猜测这个n是寄存器组号。
在中断服务程序中,一定要记得重装初值,否则每次计时的时间就会不对。
1.4 uchar与uint的区别
uchar是无符号整型,8Bit,最大到255.也可以写作 u8;
uint是16bit最大到65535.也可以写作 u16;
一般数字较小采用uchar来定义,可以节省空间。
1.5 数码管分位显示可以采用延时函数。
例如:
void display(shi,ge) { wela = 1; P0 = 0xfe; wela = 0; P0 = 0xff; dula = 1; P0 = table[ge]; dula = 0; delay(); wela = 1; P0 = 0xfd; wela = 0; P0 = 0xff; dula = 1; P0 = table[shi]; dula = 0; delay(); }
2.中断相关练习程序如下:
利用定时器0工作方式1,在实验板上实现第一个发光管以1s亮灭闪烁。
#include <reg52.h>
#define uchar unsigned char
uchar num;
sbit led1 = P1^0;
void main()
{
TMOD = 0x01;
TH0 = (65536-46082)/256;
TL0 = (65536-46082)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
WHILE(1);//等待中断服务程序的到来
}
void Timer_0() interrupt 1
{
TH0 = (65536-46082)/256;
TL0 = (65536-46082)%256;
num++;
if(num == 20)
{
num = 0;
led1 = ~led1;
}
}
用定时器0的方式1实现第一个发光二极管以200ms间隔闪烁,用定时器1的方式1实现数码管的前两位59s循环计时。
在定时器中做改变发光管状态和数值大小的事情。也就是说,需要跟着时间改变而进行改变的对象,都要用定器去辅助实现他们。
#include <reg52.h>
4000
;
#define uchar unsigned char
uchar num,i,shi,ge,j,m,n;
sbit led1 = P1^0;
void delay();
uchar code table[] =
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
sbit wela = P2^7;
sbit dula = P2^6;
void main()
{
TMOD = 0x11;
TH0 = (65536-)/256;
TL0 = (65536-)%256;
TH1 = (65536-)/256;
TL1 = (65536-)%256;
EA = 1;
ET0 = 1;
ET1 = 1;
TR0 = 1;
TR1 = 1;
while(1)
{
display(a,b);
}
}
void display(shi,ge) { wela = 1; P0 = 0xfe; wela = 0; P0 = 0xff; dula = 1; P0 = table[ge]; dula = 0; delay(); wela = 1; P0 = 0xfd; wela = 0; P0 = 0xff; dula = 1; P0 = table[shi]; dula = 0; delay(); }
void Timer_0() interrupt 1
{
TH0 = (65536-45872)/256;
TL0 = (65536-45872)%256;
j++;
if(j==4)
{
j = 0;
led1 = ~led1;
}
}
void Timer_1() inetrrupt 4
{
TH1 = (65536-45872)/256;
TL1 = (65536-45872)%256;
i++;
if(i==20)
{
i=0;
num++;
if(num==60)
num=0;
shi = num/10;
ge = num%10;
}
}
void delay()
{
for(m=5;m>0,m--)
for(n=110;n>0;n--);
}
相关文章推荐
- 郭天祥单片机编程100例程序及随笔2——数码管编程
- 郭天祥单片机编程100例程序及随笔1——LED灯编程
- 单片机用定时器分配任务的程序结构总结
- C51 语言编程:单片机与 PC 串口通信程序
- 单片机MSP430 - Timer_A 定时器中断程序
- 利用休息时间编写的关于新唐单片机较为简单的ADC+定时器+IO端口程序
- IAR开发环境的搭建以及CC2530单片机程序编程实验
- 用STM8单片机的定时器实现一个检测几路LED中出现故障程序
- 单片机入门学习五 STM32单片机学习二 跑马灯程序衍生出的stm32编程基础
- 单片机编程中软件定时器
- 单片机控制定时器或计数器之模块化编程
- dspic33E单片机IOPUWR复位原因之一 程序监控定时器
- [windows编程-定时器]在控制台程序下,settimer不能简单了事
- 51单片机教程单片机视频教程单片机自学学习入门C语言郭天祥单片机编程入门AD/DA工作原理运放电路
- 单片机用定时器分配任务的程序结构总结
- 单片机编程-定时器中断
- 【程序】STM32F103单片机使用定时器DMA进行全自动8位数码管动态扫描
- 关于郭天祥51单片机教程视频课后题《同时用两个定时器控制蜂鸣器发声》
- AVR单片机使用外部中断和定时器的NEC红外解码程序
- 单片机用定时器分配任务的程序结构总结