编写一个完整的单片机C51程序

编写一个完整的单片机C51程序,包括主程序和中断服务程序,采用单片机的定时器0工作方式1,定时器定时5ms,晶振频率12MHz,LED灯连接P1.0口,让LED灯1s钟闪烁一次。

#include<reg51.h>
sbit led=P1^0; //单片机管脚位声明
void main()
{
TMOD=0x01; //定时器TO工作在方式1
TH0=(65536-5000)/256; //装初值,12M晶振 1为1us; 5000为5000us=5ms;
TL0=(65536-5000)%256;
EA =1; //开总中断
ET0=1; //开定时器TO中断
TR0=1; //启动定时器
P1=0; //初始化P1口
while(1) ; //程序在这里等待中断发生
}
void T0_time() interrupt 1
{
unsigned char num;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
num++;
if(num==100) //0.5S (1s闪烁1次==0.5S亮0.5S灭)
{
num=0;
led=~led; //led状态取反
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-01-11
12Mhz的51单片机,经过12分频后为1MHz,则一个指令周期为1/1Mhz = 1us. 使能定时器 2 使能定时器中断 3 编写中断程序我估计你是觉得1秒的时间,一定要采纳哦
第2个回答  推荐于2018-02-11
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P1^0;
uchar T_Count = 0;
void main()
{
TMOD = 0x01;
TH0 = (65535-5000)/256;
TL0 = (65535-5000)%256;
IE = 0x82;
TR0 = 1;
while(1);
}

void LED_Flash() interrupt 1
{
TH0 = (65535-5000)/256;
TL0 = (65535-5000)%256;
if(++T_Count == 100)
{
LED = !LED;
T_Count = 0;
}
}本回答被提问者和网友采纳
第3个回答  2012-01-11
你正在考试吧?这个简单,就是考虑定时器中断一次时间不够,一次定时5ms,要中断200次,然后P1.0取反

设单片机系统如何编写一个完整的C51程序使P1.6和P1?
1、C语言是一种高级程序设计语言,它提供了十分完备的规范化流程控制结构。因此采用C51语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,这样可使整个应用系统程序结构清晰,易于调试和维护。2、对于一个较大的程序,可将整个程序按功能分成若干个模块,不同的模块完成不同的功能。对...

请问单片机C51用C语言怎么编这个例子
{case 1:{delay(40);P1=~P1;}break;case 2:{delay(60);P1=~P1;}break;} if(K2==0)delay(1);if(K2==0){NUM1--;if(NUM1==0);{NUM1=0;} } switch(NUM1){case 1:{delay(40);P1=~P1;}break;case 2:{delay(20);P1=~P1;}break;} } } void main(){ P1=0X00;while(...

C51单片机程序
0 1 方式1 16位计数器 TMOD=0x01 1 0 方式2 自动重装8位计数器 TMOD=0x02 1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器 TMOD=0x03 PCON = 0x00;PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器 WDCON = 0x00;清狗 SCON = 0x50;SCON1 = 0x40;串口控制寄...

C51单片机发送字符串程序怎么写
1、打开C51程序书写软件,新建工程,在弹出的对话框编辑工程名并保存到要保存的地方。2、保存之后会弹出如下的窗口,点击Atmel的加号,选择AT89s52并确定。3、此时就要开始建立程序了,点击如图的图标,新建程序,注意保存的时候一定要在名字后面加“.c”。4、此时点击左边的文件夹,双击,会出现下一级的...

c语言编程c51单片机
uchar i;\/\/定义循环变量 xp=0x100;\/\/指向片外RAM的100H单元 p=0x30;\/\/指向片内RAM的30H单元 for(i=0;i<10;i++){\/\/循环10次 p=*xp;\/\/将片外RAM单元中的内容传送给片内RAM单元 xp++;\/\/指向下一个片外RAM单元地址 p++;\/\/指向下一个片内RAM单元地址 } } ...

求大神在keil上帮写51单片机C语言程序
\/\/第一个实验:\/\/假设8个LED阴极指向单片机,D11连接P0.1,D12连接P0.2 ... D18连接P0.7\/\/假设K1按键在P2.3引脚#include<reg51.h>#include<intrins.h>sbit k1=P2^3;\/\/假设K1按键在P2.3引脚void main(){P0=0xfe;while(1){if(k1==0){while(k1==0);P0=_crol_(P0,1);}}}...

试用单片机keil c51写出一条把片内RAM 50H~59H单元清零的程序.
正确程序如下:CLR A MOV R0, #50H LOOP: MOV @R0, A INC R0 CJNE R0, #5AH, LOOP SJMP END

单片机C51编程(C语言):实现学号的显示(学号是10位数字)
不同的驱动,程序写法不同。如果直接用I\/O口驱动,8位数码管就这样写:wei=位选 duan=段选 \/\/断码表 uchar code shuzi[12]={0xc0,0xf9,0xa4,0xb0,0x99,\/\/0,1,2,3,4,0x92,0x82,0xf8,0x80,0x90,\/\/5,6,7,8,9,0x00,0xff};void led_scan(void){ uchar i,j;\/\/共阳数码管 ...

跪求单片机c51用汇编语言写的程序,功能为:8只发光二极管依次点亮,从...
7(电路连接时二极管一端连P1_0,一端连电阻再连5v,低电平的时候亮,因此加取反“~”)if(i==7)P1=~0x02;if(i==6)P1=~0x04;if(i==5)P1=~0x08;if(i==4)P1=~0x10;if(i==3)P1=~0x20;if(i==2)P1=~0x40;if(i==1)P1=~0x80;delay_nms(500);\/\/延时0.5s } } ...

请高手用单片机C语言编写c51时钟程序,含有6个数显管,3个按键,要自己写...
这是我初学时写的,刚好也是数码管 \/*位选接P2口,三个按钮分别接P25~P27。段码接P1,T0计数 \/ include<reg51.h> define DOU 1818\/\/按键消抖时间sbit led_1=P2^0;sbit led_2=P2^1;sbit led_3=P2^2;sbit led_4=P2^3;sbit led_5=P2^4;sbit dp=P1^7;sbit an_mod=P2^5;sbit...

相似回答