伊拉姆語翻譯我試著想用8051寫一個腳踏車測速器
也許 翻譯設計是如許:
利用at89c51晶片
用keil uVision3寫c語言
腳踏車車輪每轉一圈會經過Schmitt trigger送一個負源觸發到8051的pin12(外源中止)
然後利用8051較量爭論其周期而算出速度
再由8051 翻譯。-> 翻譯社|,-> 翻譯公司|的-> 翻譯P2輸出二位數到兩個7447在到7段LED數字顯示器
現在Schmitt trigger與7447的部份都沒有問題
問題是我用keil uVision3寫的程式燒進去都不會WORK
(就連寫最簡單的跑馬燈也不WORK)
是否是我在寫C程式 翻譯時候少了些什麼?
請高手幫我看看
-----------------------------------------------------------------
#include <regx51.h>
int counter 翻譯公司i; //counter為計時器; i為輪胎圈數;
int a 翻譯公司b,c,d,e; //A作為總數值(速率) B輸出暫存 C十位數暫存 D個位數暫存 E延遲用變
數
float period,r,p; //period周期; r為輪胎半徑;
main()
{
//計時器
TMOD=0x00; //mode 0
TH0=(8192-1000)/12; //1000us=1ms
TL0=(8192-1000)%12;
TR0=1; //timer start
//中斷器
IE=0x83; // EX0=1; ET0=1; EA=1;
TCON=0x01; // 使外源間斷1為負源處發;
//速率計算and二位數顯示
a=0x00; //將速率設0
P2=a; //先使兩個七段都顯示0
for(e=0;e<3200;e++); //延遲
while(1)
{
r=0.0005; //設r為0.0005 km
p=period/1000/3600; //把周期單元改成hr
a=2*3.14*r/p; //計較出速度(km/hr)
if(a>99) a=99; //防暴表
c=a/10; //將總數除以10取商數獲得十位
d=a%10; //將總數除以10取餘數獲得個位
c=c<<4; //將十位數(二進制)左移4位數
d=d&0x0f; //將列位數的上面四位數清為零
b=c+d; //將十位及個位數合併成8BIT BCD
P2=b; //將有個位十位數的BCD碼由P2輸出
for(e=0;e<15000;e++); //延遲
}
}
void timer0_int(void)interrupt 1 //計時器間斷0的副程式
{
TH0=(8192-1000)/12;
TL0=(8192-1000)%12;
counter++;
}
void int0(void)interrupt 0 //外源間斷0副程式
{
i++;
if(i==1) counter=0; //起頭計時
if(i==6) //取五圈的平均周期
{
period=counter/5; //周期單元為ms
i=0;
}
}
-----------------------------------------------------------------
感謝...
文章出自: https://www.ptt.cc/bbs/ASM/M.1244869615.A.CEF.html有關翻譯的問題歡迎諮詢華碩翻譯社
- Dec 08 Fri 2017 03:02
[問題] 用c語言寫8051 腳踏車測速器
close
文章標籤
全站熱搜
留言列表