㈠ 51单片机数码管循环显示0到f
void main(void)
{
char i;
IT1=1;
EX1=1;
EA=1;
while(1)
{
for(i=0;i<8;i++)
{
P1 = 0x01<<i;
delayms(1000);
}
}
}
㈡ 51单片机中断系统与F2812中断系统有和异同
功能不同。
1、51单片机系统由外部中断源产生的,具有预测和随机性,F2812中断系统只有生产是的数据来维持的。
2、51单片机为辅助程序服务,F2812主要为主程序服务。
㈢ 51单片机f=12MHz,用定时器T0,工作方式1,中断方式工作,从P1.0输出周期为1s的方波,让发光二极管以1Hz闪烁
程序最后 一段
else
{
LED1=1;
t = 0;
}
这部分中的t = 0 ;多余了。每次定时器中断进来的时候t不等20就会执行else ,然后t被清零,这样t就一直不可能等于20了。
㈣ 51单片机型号STC15F2K60S2 第一次烧录成功了 但是并没有现象 程序也非常简单 求分析一下是什么原因
这个~你调用REG51.H
那你这个P0_0是什么意思?那个头文件里没有定义P0_0!
你试试sbit LED=P0^0;
然后操作LED试试!
㈤ 51F单片机中,如果某个特殊寄存器地址是0XD8,SFP是F页,它的地址可不可以写成0FD8
当然不可以,0x表示十六进制,0f什么鬼
㈥ 51单片机怎样输出频率F=0.2-50HZ,占空比D=1-100%可调的PWM波形
利用定时器。
uint PwmCnt = 0;
sbitPWN_OUT=P1^1;//可改动
uintPwmD=50;//占空比可调
uintPwmF=500;//频率可调10=1HZ500=50HZ
uintPwmCnt=0;//占空比计数值
uintFreCnt=0;//频率分频值
voidT0interrupt1
{
.....//赋值TO计数值50us
if(++FreCnt>=(1000/PwmF))//通过改变PwmF达到分频效果改变输出频率
{
if(++PwmCnt>=100)PwmCnt=0;//再次分频100占空比精度需要这样
if(PwmCnt<PwmD)//改变D值可以改变引脚状态占用时间
{
PWN_OUT=1;
}
else
{
PWN_OUT=0;
}
}
}
//思想是这样我也没测过
㈦ 51单片机汇编语言如何用定时器中断实现数码管从0-F每秒进1且循环进行。
ORG0000H
JMPBEGIN
ORG000BH
LJMPT0ISR
ORG0030H
TABLE:;共阴极数码管显示代码表
DB3FH,06H,5BH,4FH,66H;01234
DB6DH,7DH,07H,7FH,6fh;56789
;---------------------------------------
BEGIN:
MOVTMOD,#01H
MOVTH0,#HIGH(65536-50000)
MOVTL0,#LOW(65536-50000)
SETBTR0
SETBET0
SETBEA
MOVR2,#20
CLRA
LOOP:
MOVDPTR,#TABLE
PUSHACC
MOVCA,@A+DPTR
MOVP0,A
POPACC
SJMPLOOP
T0ISR:
CLRTR0
MOVTH0,#HIGH(65536-50000)
MOVTL0,#LOW(65536-50000)
SETBTR0
DJNZR2,T0E
INCA
ANLA,#0FH
T0E:
RETI
END
㈧ 51单片机,C8051F310,在使用中,程序总是死在延时循环中,这是为什么
要看到你程序的原貌才可以知道问题所在,这局部的一点点程序是看不出问题的,死机不一定就在这个循环里面,可能在其他地方。
㈨ 51单片机最快速度可以达到多少
单片机的速度是以MIPS(1MIPS相当于每秒钟执行1百万条指令)为单位计算的,一般的AT89S52单片机(12M晶振)的速度是1MIPS,飞利浦的单片机同样晶振下可以达到2MIPS,华邦的51可以达到3-4MIPS,STC的51可以达到12MIPS,
再考虑到晶振的影响,按照现有资料,最快的应该在STC和C8051F系列单片机之间选,STC理论上最多可以达到90MIPS(个人认为很玄乎),C8051F可以达到25-100MIPS。
㈩ 51单片机实现0~F数码管滚动显示
你的程序,在下一句一句来鉴定并修复
voiddelay(ucharx)//延时函数,大约延时xms
{
uchari,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
voidxianshi()//显示函数
{
uchari;
for(i=0;i<6;i++)
{
wei=1;//开锁存
P0=wen[i];//位选
wei=0;//关锁存
an=1;//开锁存
P0=huancun[i];//段选
an=0;//关锁存
delay(2);//延时点亮约2ms
P0=0xff;//消影
}
}
voidinit()
{
uchari;
TMOD=0x01;
TH0=(65536-50000)/256;//50ms定时初值(T0计时用)
TL0=(65536-50000)%256;
ET0=1;//开T0中断允许
EA=1;//开总中断
TR0=1;//开T0计时器
for(i=0;i<6;i++)
{
huancun[i]=shu[i];//段选送缓存
}
}
voidmain()
{
init();
while(1)
{
xianshi();
}
}
voidtime_intt0(void)interrupt1//50ms中断
{
uchart,i,j;
TH0=(65536-50000)/256;//重置初值
TL0=(65536-50000)%256;
t++;
if(t==20)//1秒到50ms*20=1s
{
t=0;
j++;//j+1
for(i=0;i<6;i++)//使段选数据移位输入缓存
{
huancun[i]=shu[i+j];
}
if(j>9)//或者if(j==10),移到最后面,回到初始状态
{
j=0;
}
}
}
请鉴定,有问题再将