当前位置:文档之家› 单片机典型例程

单片机典型例程


count0++;
if (count0 == 20)
{
count0 = 0;
temp0++;
if (temp0 > 60)
{
temp0 = 0;
}
}
}
/*定时器 1 中断服务程序*/
void timer1() interrupt 3 //T1 内部查询顺序 3
{
TH1 = 0x4b;
TL1 = 0xfd;
//中断系统练习 1 #include <reg52.h>
#define uchar unsigned char #define uint unsigned int
uchar count;//全局变量 存储定时器加一计数器溢出次数 /*中断服务特殊功能寄存器配置*/ void init() {
TMOD = 0x01; //T0 16 为计数工作模式
TH0 = 0x4b;
TL0 = 0xfd; //T0 定时 50ms
ET0 = 1; //T0 中断
TR0 = 1; //启动 T0
EA = 1;
//开总中断
}
void main()
{
init();
//调用定时器配置函数
while(1); //空循环
}
/*定时器 0 中断服务程序*/
void timer0() interrupt 1 //T0 内部查询顺序 1
{
TH0 = 0x4b;
TL0 = 0xfd;
//定时器 0 再次放初值 50ms
count++;
//每次溢出计数变量加 1
if (count == 20)
//溢出 20 次即 20*50=1S
{
P1 = ~P1;
//对 P1 按位取反
count = 0;
//计数函数清零
}
}
中断系统练习 2 #include <reg52.h> #include <intrins.h>
//清除段码 //点亮第二位数码管
du = 1; P0 = leddata[ge]; du = 0; delay(1); }
/*中断服务特殊功能寄存器配置*/
void init() {
TMOD = 0x11;
//定时器 T1/T0 16 为计数工作模式
TH1 = TH0 = 0x4b;
TL1 = TL0 = 0xfd; //T1/T0 定时 50ms
uchar code leddata[]={十六进制代码};
void delay(uint z) //1ms 延时 {
uint x,y; for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--); }
void display(uchar i) //数码管显示函数 {
uchar num;
/*void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
} */
void UART_init()
{
TMOD = 0x20; //T1 工作模式 2 8 位自动重装
TH1 = 0xfd;
#define uchar unsigned char #define uint unsigned int
sbit we = P2^7; //数码管位选 sbit du = P2^6; //数码管段选
/*数码管段码*/ uchar code leddata[]={十六进制代码};
/*1 毫秒延时函数*/ void delay(uint z) {
}
}
void int0() interrupt 0 //外部中断 0,中断服务程序
{
TR0 = 0;
//关闭定时器 0
}
/*定时器 0 中断服务程序*/
void timer0() interrupt 1 //T0 内部查询顺序 1
{
TH0 = 0x4b;
TL0 = 0xfd;
//定时器 0 再次放初值 50ms
TL1 = 0xfd; //比特率 9600
TR1 = 1; //启动 T1 定时器
SM0 = 0;
SM1 = 1;
//串口工作方式 1 10 位异步
REN = 1; //串口允许接收
EA = 1; //开总中断
ES = 1; //串口中断打开
}
void main()
{
UART_init(); //串口初始化
uchar shi,ge; shi = i / 10; //求模 ge = i % 10; //求余
P0 = 0xff; we = 1; P0 = 0xfe; we = 0;
//清除段码 //点亮第一位数码管
du = 1; P0 = leddata[shi]; du = 0; delay(1);
P0 = 0xff; we = 1; P0 = 0xfd; we = 0;
uint x,y; for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--); }
/* 串口初始化函数
ET1 = ET0 = 1;
//开 T1/T0 中断
TR1 = TR0 = 1;
//启动 T1/T0
EX0 = 1;
//开外部中断 0
IT0 = 0;
//外部中断 0 为低电平触发
EA = 1;
//开总中断
}
void main()Fra bibliotek{init();
//调用配置函数
while(1)
{
display(temp0);//数码管显示
//定时器 1 再次放初值 50ms
count1++;
if (count1 == 10)
{
count1 = 0;
P1 = temp1;
temp1 = _cror_(temp1,1);//循环右移一次
}
}
//串口通信 #include <reg52.h>
#define uchar unsigned char #define uint unsigned int
while(1); }
void UART() interrupt 4 {
if(RI) //检测是否接收完成 {
num = SBUF; //num 取出接收缓存器的值 P1 = SBUF; num++; RI = 0; SBUF = num; while(!TI); TI = 0; } }
/* 以 4800bps 从计算机发任意一字节数据,通过数码管以十进制显示 的形式显示出来。 */ #include <reg52.h>
#define uchar unsigned char
#define uint unsigned int sbit we = P2^7; sbit du = P2^6;
uchar count0,count1;//全局变量 存储定时器加一计数器溢出次数 uchar temp0,temp1 = 0x7f; //temp0 负责数码管的值,temp1 负责流水灯的值
相关主题