㈠ 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;
}
}
}
請鑒定,有問題再將