① 使用C語言編程實現單片機與上位機串列通信,其上位機發送數據給單片機,
#include"reg52.h"
#defineucharunsignedchar
#defineLLONG30
//charcodetable[]="Hello!";
ucharcodetable[]={'F','i','r','s','t','C','h','a','r',':',0x0d,0x0a,'W','W','W','.','H','E','B','T','U','.','E','D','U','.','C','N',0x0d,0x0a};
ucharFlag,FirstChar=0,UARTChar[10]={0};
voiart()interrupt4
{
ES=0;//----中斷暫停----
RI=0;//----清標志位----
FirstChar=SBUF;
Flag=1;
ES=1;//----中斷開啟----
}
voidmain()
{
chari=0;
TH1=0xFD;
TL1=0xFD;
TMOD=0x20;//T1在定時器方式
TCON=0x40;//TR1=1
PCON=0x00;//SMOD為0
SCON=0x50;//串列方式1REN=1
IP=0x00;
IE=0x90;
while(1)
{
if(Flag==1)
{
ES=0;//----中斷暫停----
Flag=0;//----清標志位----
for(i=0;i<10;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
SBUF=FirstChar;
while(!TI);//----通訊等待----
TI=0;//----清標志位----
for(i=10;i<LLONG;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
ES=1;//----中斷開啟----
}
}
}
② 單片機C51 C語言編程問題!!!!
voiddisplay(ucharshi,ucharge)
{
uintledout[1],i;//這里應該是ledout[2]
我在proteus上進行了模擬,但是不知道什麼原因,只對共陽極LED數碼管好使。我就把程序稍微做了改動,模擬結果可以正確計時。
我把程序貼在下面供參考
#include<reg52.h>
#define禪悔ucharunsignedchar
#defineuintunsignedint
ucharnum=0,count=0,num2=0,shi=0,ge=0;
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//共陽//段選數據表
//ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
ucharcodewei[2]={0xfe,0xfd};//位選數據表
voiddisplay(uchar,uchar);
voiddelay(uint);
voidmain()
{
TMOD=0x10;//設定定時器1工作在方式1
TH1=(65536-50000)/256;//裝載初值
TL1=(65536-50000)%256;//開總中斷
//開定時器1中斷
ET1=1;//啟動定時器1
TR1=1;//程序在此不停對於數碼管動態掃描等待中斷
EA=1;
while(1)
{
display(shi,ge);//顯示函數
}
}
voiddisplay(ucharshi,ucharge)
{
uintledout[2],i;
ledout[0]=table[shi];雹襲鋒//段選數據十位
ledout[1]=table[ge];//段選數據各個
for(i=0;i<2;i++)
{//用P0輸出位選數據
P0=wei[i];
//這里用查表的方式來賦值
P2=ledout[i];//用P2輸出段選數據
delay(1);//掃描間隔
}
}
//1S中斷函數
voidT1_time()interrupt3
{
TH0=(65536-50000)/256;源晌//重新裝載初值
TL0=(65536-50000)%256;
count++;
if(count==20)//如果到了20次,說明1秒到
{//把COUNT清零重新計數20次
count=0;
num2++;//用NUM2向來數碼管顯示到60後歸零
if(num2==60)
num2=0;
shi=num2/10;//把NUM2分成2個數十位和個位
ge=num2%10;
}
}
voiddelay(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)//延時程序
for(j=110;j>0;j--);
}
③ 大一新生剛學完C語言,想自學單片機,給點建議~
如果剛開始學,建議先學習51單片機。市場上賣的51學習板都差不多,也可以自己在網上搜一些原理圖,自己做一個簡單的學習班,既省錢又可以鍛煉動手能力。書本和視頻教程當然是要看的,找個高年級的學長教你可以起到事半功倍的效果。做實驗是一種很快的學習方法,有些想不通的東西,一做實驗就懂了。
單片機程序可以用匯編和C語言編寫,如果學習ARM和嵌入式的話,建議使用C語言。
關於嵌入式的定義:(來源於http://ke..com/view/30741.htm?fr=ala0_1_1)
定義 IEEE(國際電氣和電子工程師協差高祥會)對嵌入式系統的定義:「用於控制、監視或者輔助操作機器和設備的裝置」(原文為:Devices Used to Control,Monitor or Assist the Operation of Equipment,Machinery or Plants)。這主要是從應用對象上加以定義,從中可以看出嵌入式系統是軟體和硬體的綜合體,還可以涵蓋機械等附屬裝置。 國內普遍認同的嵌入式系統定義為:以應用為中心,以計算機技術為基礎,軟硬體可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統。 可以這樣認為,嵌入式系統是一種專用的計算機系統,作為裝置或設備的一部分。通常,嵌入式系統是一個控製程序存儲在ROM中的嵌入式處理器控制板。事實上,所有帶有數字介面的設備,如手錶、微波爐、錄像機、汽車等,都使用嵌入式系統,有些嵌入式系統還包含操作系統,但大多數嵌入式系統都是是由單個程序實現整個控制邏輯。
我個人對嵌入式的理解:舉個例子說吧,你做了一個萬年歷,可以顯示公歷和農歷,整點的時候會像一聲;過虛搏了一段時間,想加入定時功能,可以把單片機取下來,修改程序;又過了一段時間,想把簡單的鬧鈴改成音樂,但是單片機的程序存儲器不夠了,你可以換一個程序存儲器更大但管腳相同的單片機;又過了一段時間,你想加入溫度顯示,但是硬體不能完成這個功能,你需要在硬體上加溫度感測器,在單片機程序中加入溫度檢測和顯示程序。
我個人對嵌入式的理解就是軟體和硬體的綜合體。
MP3、電子閱讀器、文曲星有些是用單片機做的,有些是FPGA/CPLD可編程邏輯器件做的,還有些是單片機和專用晶元相結合做的。比如MP3,可以直接將MP3解碼電路做在一個晶元里,這樣就不需要寫MP3解碼程序了念神。
④ 51單片機C語言編程
你的設計有點問題,不過你看下這個程序對你應該有幫助。
#include <reg52.h>
#define int8 unsigned char
#define int16 unsigned int
#define int32 unsigned long
int8 flag;
int8 n;
int8 code table[][32]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/* " " */
{0x04,0x28,0x08,0x24,0x32,0x22,0xC2,0x21,0xC2,0x26,0x34,0x38,0x04,0x04,0x08,0x18,0x30,0xF0,0xC0,0x17,0x60,0x10,0x18,0x10,0x0C,0x14,0x06,0x18,0x04,0x10,0x00,0x00},/*"歡",0*/
{0x02,0x02,0x04,0x82,0xF8,0x73,0x04,0x20,0x02,0x00,0xE2,0x3F,0x42,0x20,0x82,0x40,0x02,0x40,0xFA,0x3F,0x02,0x20,0x42,0x20,0x22,0x20,0xC2,0x3F,0x02,0x00,0x00,0x00},/*"迎",1*/
{0x00,0x01,0x04,0x02,0x1C,0x0C,0xC0,0x3F,0x1C,0xC0,0x02,0x09,0x02,0x16,0x92,0x60,0x4A,0x20,0x82,0x2F,0x02,0x20,0x0E,0x24,0x00,0x22,0x90,0x31,0x0C,0x20,0x00,0x00},/*"您",2*/
{0x44,0x10,0x44,0x14,0x88,0x54,0x88,0x54,0xD0,0x5F,0x30,0x50,0x60,0x50,0xFE,0x7F,0x40,0x50,0x20,0x90,0xB0,0x9F,0x98,0x92,0x8C,0x94,0x88,0x34,0x80,0x11,0x00,0x00},/*"乘",3*/
{0x82,0x00,0x02,0x01,0x22,0x06,0x22,0x38,0x22,0x04,0x22,0x03,0x22,0x00,0xFE,0xFF,0xA2,0x00,0x22,0x01,0x22,0x02,0x22,0x3C,0x22,0x02,0x02,0x01,0x02,0x00,0x00,0x00},/*"坐",4*/
{0x02,0x00,0x0C,0x00,0xF0,0x3F,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0xA0,0x00,0x60,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00},/*"廣",5*/
{0x80,0x00,0x01,0x07,0x06,0x00,0x18,0x00,0xE0,0xFF,0x00,0x04,0x00,0x03,0x00,0x00,0xFE,0x7F,0x00,0x08,0x00,0x06,0x80,0x01,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00},/*"州",6*/
{0x00,0x00,0x04,0x20,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x20,0x04,0x00,0x00,0x00},/*"三",7*/
{0x20,0x08,0x20,0x86,0x7F,0x60,0x80,0x0F,0x00,0x04,0x00,0x1A,0x00,0xEA,0x00,0x2A,0x00,0x2A,0x00,0x2A,0x00,0x2A,0xF0,0x2B,0x0C,0x28,0x02,0x20,0x0F,0x00,0x00,0x00},/*"汽",8*/
{0x00,0x00,0x80,0x00,0x04,0x01,0x0E,0x02,0x14,0x0C,0x24,0x70,0xC4,0x21,0x8C,0x00,0x08,0x00,0x08,0x70,0x28,0x08,0x1E,0x06,0x0C,0x03,0x80,0x01,0x00,0x01,0x00,0x00},/*"公",9*/
{0x00,0x00,0x00,0x08,0xF8,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0x20,0x49,0xF0,0x49,0x00,0x48,0x04,0x40,0x02,0x40,0xFC,0x7F,0x00,0x00,0x00,0x00},/*"司",10*/
{0x00,0x00,0x80,0x00,0x04,0x01,0x0E,0x02,0x14,0x0C,0x24,0x70,0xC4,0x21,0x8C,0x00,0x08,0x00,0x08,0x70,0x28,0x08,0x1E,0x06,0x0C,0x03,0x80,0x01,0x00,0x01,0x00,0x00},/*"公",11*/
{0x40,0x00,0x40,0x08,0x41,0x08,0x42,0x08,0x4C,0x08,0xF8,0x7F,0x50,0x08,0x40,0x08,0x40,0x08,0x60,0x08,0xD0,0x7F,0x4C,0x08,0x47,0x08,0x42,0x08,0x40,0x00,0x00,0x00},/*"共",12*/
{0x20,0x08,0x20,0x86,0x7F,0x60,0x80,0x0F,0x00,0x04,0x00,0x1A,0x00,0xEA,0x00,0x2A,0x00,0x2A,0x00,0x2A,0x00,0x2A,0xF0,0x2B,0x0C,0x28,0x02,0x20,0x0F,0x00,0x00,0x00},/*"汽",13*/
{0x20,0x00,0x20,0x20,0x20,0x21,0x20,0x23,0x20,0x25,0x20,0x39,0x20,0xE1,0x20,0x21,0xFF,0x2F,0x20,0x21,0x20,0x21,0x20,0x21,0x20,0x21,0x20,0x21,0x20,0x00,0x00,0x00},/*"車",14*/
{0x00,0x00,0x00,0x00,0x1A,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",15*/
{0x00,0x04,0x01,0x04,0x02,0x04,0x04,0x04,0x08,0x04,0x30,0x04,0xC0,0x05,0x00,0xFE,0x80,0x05,0x60,0x04,0x10,0x04,0x0C,0x04,0x06,0x04,0x03,0x04,0x02,0x04,0x00,0x00},/*"大",16*/
{0x00,0x02,0x40,0x0C,0x40,0x08,0x40,0x48,0x40,0x3A,0x40,0x2A,0x42,0x0A,0x41,0x8A,0xFE,0x7A,0x40,0x2B,0x40,0x0A,0x40,0x18,0x40,0xEA,0x40,0x4C,0x40,0x08,0x00,0x00},/*"學",17*/
{0x20,0x08,0x30,0x08,0xE0,0xFF,0x42,0x08,0x4C,0x08,0xF0,0x1F,0x10,0x12,0x1A,0x12,0xF2,0x13,0x04,0x10,0xC8,0xFF,0x30,0x10,0xCC,0x50,0x02,0x37,0x1C,0x12,0x00,0x00},/*"城",18*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0E,0x14,0x10,0x24,0x10,0x44,0x10,0x84,0x11,0x0C,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"2",0*/
{0x04,0x02,0x44,0x06,0xC4,0x1A,0x48,0xE3,0x48,0x46,0x48,0x00,0x04,0x09,0x04,0x09,0x08,0x09,0xC8,0xFF,0x30,0x09,0x28,0x49,0x44,0x39,0x02,0x29,0x1F,0x01,0x00,0x00},/*"線",19*/
{0x00,0x02,0x02,0x42,0x04,0x42,0x08,0x42,0x30,0x42,0xC0,0x7F,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0xFE,0x7F,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x00},/*"開",20*/
{0x40,0x04,0x80,0x08,0x00,0x11,0xFF,0xEF,0x00,0x44,0x02,0x10,0x82,0x10,0x82,0x10,0x82,0x90,0xFE,0x7F,0x82,0x50,0x82,0x10,0x82,0x10,0x82,0x10,0x02,0x10,0x00,0x00},/*"往",21*/
{0x00,0x04,0x01,0x04,0x02,0x04,0x04,0x04,0x08,0x04,0x30,0x04,0xC0,0x05,0x00,0xFE,0x80,0x05,0x60,0x04,0x10,0x04,0x0C,0x04,0x06,0x04,0x03,0x04,0x02,0x04,0x00,0x00},/*"大",22*/
{0x00,0x02,0x40,0x0C,0x40,0x08,0x40,0x48,0x40,0x3A,0x40,0x2A,0x42,0x0A,0x41,0x8A,0xFE,0x7A,0x40,0x2B,0x40,0x0A,0x40,0x18,0x40,0xEA,0x40,0x4C,0x40,0x08,0x00,0x00},/*"學",23*/
{0x20,0x08,0x30,0x08,0xE0,0xFF,0x42,0x08,0x4C,0x08,0xF0,0x1F,0x10,0x12,0x1A,0x12,0xF2,0x13,0x04,0x10,0xC8,0xFF,0x30,0x10,0xCC,0x50,0x02,0x37,0x1C,0x12,0x00,0x00},/*"城",24*/
{0x00,0x00,0x00,0x00,0x1A,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",25*/
{0x00,0x02,0x00,0x42,0x00,0x32,0xFE,0x23,0x04,0x00,0x08,0x44,0xFF,0x55,0x50,0x55,0x50,0x55,0x50,0xFD,0x52,0x55,0x51,0x55,0xFE,0x55,0x00,0x44,0x00,0x04,0x00,0x00},/*"請",26*/
{0x00,0x01,0x04,0x02,0x1C,0x0C,0xC0,0x3F,0x1C,0xC0,0x02,0x09,0x02,0x16,0x92,0x60,0x4A,0x20,0x82,0x2F,0x02,0x20,0x0E,0x24,0x00,0x22,0x90,0x31,0x0C,0x20,0x00,0x00},/*"您",27*/
{0x82,0x00,0x02,0x01,0x22,0x06,0x22,0x38,0x22,0x04,0x22,0x03,0x22,0x00,0xFE,0xFF,0xA2,0x00,0x22,0x01,0x22,0x02,0x22,0x3C,0x22,0x02,0x02,0x01,0x02,0x00,0x00,0x00},/*"坐",28*/
{0x01,0x08,0xC2,0x08,0x44,0x0F,0x28,0xF8,0x30,0x08,0xCE,0x0F,0x04,0x01,0x00,0x41,0x02,0x41,0x01,0x41,0xFE,0x4F,0x00,0x51,0x00,0x61,0x00,0x41,0x00,0x01,0x00,0x00},/*"好",29*/
{0x42,0x08,0x81,0x08,0xFE,0xFF,0x00,0x09,0x01,0x0A,0x01,0x01,0x02,0x11,0x0C,0x11,0x30,0x11,0xC0,0xFF,0x30,0x11,0x08,0x11,0x06,0x11,0x03,0x11,0x02,0x01,0x00,0x00},/*"扶",30*/
{0x20,0x08,0xC0,0x48,0x00,0x4B,0xFF,0x7F,0x00,0x89,0x9C,0x88,0x00,0x10,0xBC,0x2A,0x82,0xCA,0xC2,0x4A,0xB2,0x5A,0x82,0x6A,0xAE,0x0A,0x90,0x0F,0x0C,0x00,0x00,0x00},/*"穩",31*/
{0x00,0x00,0x00,0x00,0x00,0x00,0xFA,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",32*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}/* " " */
};
void delay(void);
int16 offset;
void main(void)
{
int8 i;
int8 *p;
flag=0x10;
n=0;
TMOD=0x01;
TH0=0xb1;
TL0=0xe0;
ET0=1;
EA=1;
TR0=1;
p=&table[0][0];
while (1)
{
for (i=0;i<8;i++) //顯示左半邊屏幕
{
P0=*(p+offset+2*i);
P2=i|0x08; //P2.4=0,P2.3=1 選中U2, 輸出掃描碼給U6
delay();
P0=*(p+offset+2*i+1);
P2=i|0x10; //P2.4=1,P2.3=0 選中U3, 輸出掃描碼給U7
delay();
}
for (i=8;i<16;i++) //顯示右半邊屏幕
{
P0=*(p+offset+2*i);
P2=(i-8)|0x20; //P2.5=1 P2.4=0, P2.3=0 選中U4,輸出掃描碼U8
delay();
P0=*(p+offset+2*i+1);
P2=(i-8)|0x40; //P2.6=1 P2.5=0, P2.4=0 選中U5,輸出掃描碼U9
delay();
}
}
}
void delay(void)
{
int16 i;
for (i=0;i<50;i++)
;
}
void timer0() interrupt 1 using 3
{
TF0=0;
TH0=0xb1;
TL0=0xe0;
if (n<10)
{
n++;
}
else
{
offset+=2;
if (offset>1100)
offset=0;
n=0;
}
}
⑤ 關於學習C語言和單片機的問題
先針對你的提問做些回答:從你的描述上看你是想主攻單片機。如果這樣對C語言的要求並不高,按正規流程學完指針、結構等就基本上夠用了,譚浩強的書更多的是針對PC機的,有些東西不了解也罷。至於對內存的理解,我感覺你的說法不太貼切,應該是了解單片機後就會更容易理解內存的概念,而不是要了解單片機就必須首先理解內存。如果具備數據結構、操作系統原理、編譯原理這一類的知識,都會對編程也好處,好的演算法會起到事半功倍的效果,這對所有的編程都是一樣的,盡管這屬於錦上添花,有時間學學還是提倡的,很多東西雖然不能原樣照搬,但總可以照葫蘆畫瓢借鑒的。
要想成為單片機高手僅僅對單片機熟悉是不行的,還要學很多其它知識。一般會有以下幾個階段,我順序說吧,不成體系但基本上涵蓋。
學單片機的學習我推薦一本書給你:《mcs-51、96系列單片機原理及應用》,孫涵方著,32開本大小,北京航空航天大學出版社1988年出版。書雖老,但很經典,對匯編部份講的最細致、最完整,還有許多常用子程序。附帶說一下,51匯編一定要學,對硬體的理解會有很大幫助。(如果買不著,也可以在網路文庫中下載PDF格式的電子版)。
另外就是熟悉一下KEIL C單片機編譯軟體,目前搞51單片機的一般都用這個軟體。這類書很多,我推薦的是《單片機高級語言C51應用程序設計》,徐愛均、彭秀華著,電子工業出版社1998年第一版出版,再版次數可能很多,都一樣。
如果你以後想以軟體為主,上面這兩本書讀完並消化後,基本上就可以了,因為此時已經具備了一些硬體的基礎,以後只要和硬體工程師配合好,搞不懂的硬體多問問,編制軟體也就沒什麼太大的問題了,至少可以成為C51高手。
如果還想更進一步,那麼首先要學習模擬電路,這是硬體電路的基礎,數字電路只是模擬電路中分化出來的一個大類,也是通過模擬電路構建出來的。模擬電路有一定難度,必須需要大量的實踐才能成為高手,不像數字電路那樣高手很多。模電好的一定是硬體高手。入門可採用隨便哪個學校的教材,以後的自己選擇了。
然後就是學習畫電路板。眼下PROTEL99SE和PADS2007是兩種主流的兩種電路板繪制軟體。畫電路板同樣也是有學問的,牽涉到諸如可靠性和電子兼容等問題,就不多說了,這類書更多,不推薦了。
最後,單片機的學習一定要和實踐結合起來。初期可以買個開發板,隨時學習,隨時上機實踐。另外我推薦的兩本書比較側重理論,你可以再買兩本有習題之類的書,配合使用更好。
鑒於你是打算做長遠規劃,所以隨手寫了這么多,希望有所幫助。
⑥ 使用單片機開發產品時用C語言多嗎
我以前用華邦和洪晶的單片機做開發的時候就開始用C語灶塌侍言,現在用ARM做東西,更離不開C語言.
因為C語言寫出的東西移植性好,可讀性也好,而且便於開發,縮短開發周期.但我並不否認匯編的重衫好要性,個人認為匯編對於初學者非常重要,因為匯編可以幫助理解硬體,有助於理解優化C語言程序,另外匯編對一些實時性高的場合(如中斷服務程序,DSP數據處理程序)和底層硬體的應用場合(如keil C51、ARM的啟動程序)都需要匯編來編寫。
但總體上來講,用單片機開發產品的時候絕大隱吵多數還是用C語言。建議在掌握匯編的基礎上使用C開發產品。
⑦ 什麼是單片機在實際中有那些應用呢
單片機概述
1、何謂單片機 一台能夠工作的計算機要有這樣幾個部份構成:CPU(進行運算、控制)、RAM(數據存儲)、ROM(程序存儲)、輸入/輸出設備(例如:串列口、並行輸出口等)。在個人計算機上這些部份被分成若干塊晶元,安裝一個稱之為主板的印刷線路板上。而在單片機中,這些部份,全部被做到一塊集成電路晶元中了,所以就稱為單片(單晶元)機,而且有一些單片機中除了上述部份外,還集成了其它部份如A/D,D/A等。
⑧ 51單片機C語言編程
#include<AT89X51.H>
//設CPU是時鍾12MHz的8051系列
dataunsignedintms;
sbitKEY=P2^3;
voidSetupTimer0()
{
TMOD&=0XF0;//僅保留T1信息
TMOD|=0X02;//設置T0:定時功能,方式2,自動重載8位定時器/計數器
TH0=256-250;//定時每0.25ms中斷一次
TL0=256-250;
TR0=1;//開啟定時器
ET0=1;//定時器0中斷打開
}
voidTimer0_ISR()interrupt1//中斷服務程序
{
staticdataunsignedcharus250;
if(++us250>=4){++ms;us250=0;}
}
voidprocess1()
{
unsignedchari,d;
unsignedinttime,dlt;
//第一步8燈整體一直閃(閃10下)。
for(i=0;i<10;++i)
{
P1=0;
for(time=ms,dlt=0;dlt<500;dlt=ms-time);
P1=0xFF;
for(time=ms,dlt=0;dlt<500;dlt=ms-time);
}
//第二步整體滅5秒。
P1=0xff;
for(time=ms,dlt=0;dlt<5000;dlt=ms-time);
//第三步從右邊逐個點亮並循環4遍。
for(i=0;i<4;++i)
for(d=1;d;d<<=1)
for(P1=~d,time=ms,dlt=0;dlt<500;dlt=ms-time);
//第4步循環完畢後全部熄滅;
P1=0xff;
}
voidprocess2()
{
unsignedchari,d;
unsignedinttime,dlt;
//第一步8燈整體閃3次。
for(i=0;i<3;++i)
{
P1=0;
for(time=ms,dlt=0;dlt<500;dlt=ms-time);
P1=0xFF;
for(time=ms,dlt=0;dlt<500;dlt=ms-time);
}
//第二步從左邊逐個點亮並循環2遍。
for(i=0;i<2;++i)
for(d=0x80;d;d>>=1)
for(P1=~d,time=ms,dlt=0;dlt<500;dlt=ms-time);
//第三步循環完畢後8燈一直流水;
for(;KEY;)
for(d=1;d&&KEY;d<<=1)
for(P1=d,time=ms,dlt=0;dlt<500&&KEY;dlt=ms-time);
}
voidprocess3()
{
unsignedchari,j,d;
unsignedinttime,dlt;
//第一步8燈整體保持全滅,滅的時間為500ms,可以修改
P1=0XFF;
for(time=ms,dlt=0;dlt<500;dlt=ms-time);
//第二步8燈從外到里依次點亮,重復兩遍。
for(i=0;i<2;++i)
for(d=0x1,j=0x80;d<=0x8;d<<=1,j>>=1)
for(P1=~(d|j),time=ms,dlt=0;dlt<500;dlt=ms-time);
//第三步8燈從里到外依次點亮,重復兩遍循環完畢後8燈保持在4亮4滅的狀態
for(i=0;i<2;++i)
for(d=0x8,j=0x10;d;d>>=1,j<<=1)
for(P1=~(d|j),time=ms,dlt=0;dlt<500&&KEY;dlt=ms-time);
P1=0xc3;
for(;KEY;);
}
voidprocess4()
{
unsignedchari,d;
unsignedinttime,dlt;
//第一步整體保持全滅。滅的時間為1000ms,可以修改
P1=0XFF;
for(time=ms,dlt=0;dlt<1000;dlt=ms-time);
//第二步從左到右流水兩遍。
for(i=0;i<2;++i)
for(d=1;d;d<<=1)
for(P1=d,time=ms,dlt=0;dlt<500;dlt=ms-time);
//第三步從右到左逐個點亮三遍。
for(i=0;i<3;++i)
for(d=0x1;d;d<<=1)
for(P1=~d,time=ms,dlt=0;dlt<500;dlt=ms-time);
//第4步其中一盞燈保持閃
for(;KEY;)
{
for(d=0x8;KEY;d^=0x8)
for(P1=~d,time=ms,dlt=0;dlt<500&&KEY;dlt=ms-time);
}
}
voidmain()
{
//dataunsignedcharp0;
ms=0;
SetupTimer0();
EA=1;//全局中斷打開
while(1)
{
process1();
process2();
process3();
process4();
}
}
⑨ 單片機編程用匯編好還是C語言好
單片機編程,C語言編程但很好。
大致分成三類:機器語言、匯編語言、高級語言。機器語言由於繁瑣容易出錯,大部分用戶已經不再便用。
1.單片機匯編語言
匯編語言是一種符號語言,它使用文字助記符來表示機器指令。它是最接近機器代碼的語言。它的主要優點是佔用資源少,程序執行效率高。由於每條指令對應於一個機器碼,所以每一步的執行都非常清楚。
並且程序的大小和棧調用都易於控制,調試也更加方便。但是不同類型的單片機,其匯編語言可能會有一點不同,所以移植起來並不容易,因為它們的指令系統是不同的。但掌握匯編語言可以幫助我們理解影響四川語學習效率的特殊規律。
例如,了解匯編語言指令可以讓您使用晶元內ram作為變數,因為晶元外變數需要多個指令來設置訪問的累加器和數據指針。
類似地,只有匯編編程經驗才能防止在需要浮點數和啟用函數時創建大型、低效的程序,這在沒有匯編語言的情況下是無法做到的。
2.單片機的C語言
MCUC語言是一種經過編譯的程序設計語言,它兼顧了多種高級語言的特點,具有匯編語言的功能。C語言具有豐富的庫函數,計算速度快,編譯效率高,可移植性好,並能實現對系統硬體的直接控制。
此外C語言程序具有完整的程序模塊結構,為軟體開發中的模塊化編程方法提供了強有力的保證。與組裝相比,具有以下優點:
MCU的指令系統不需要知道,只需要對51的內存結構有一個初步的了解,對於寄存器的分配,不同的內存定址和數據類型等細節都由編譯器來管理。程序有一個正式的結構,可以分為不同的功能。這使得程序可以結構化,結合變數選擇和特殊操作,並提高程序的可讀性。
大大減少了編程和調試時間,從而提高了效率。所提供的庫包含許多具有強大數據處理能力的標准子常式,由於其方便的模塊化編程技術,可以很容易地將這些子常式編程到新程序中。
功能強大靈活,庫中包含了很多標準的子程序,具有較強的數據處理能力,可以方便地編程植入新的程序,因為它具有方便的模塊化編程技術。
MCUC語言作為一種非常方便的語言而得到了廣泛的支持,(語言程序本身不依賴於機器硬體系統,基本上不根據單片機的修改就可以將U的不同之處快速移植過來。)
利用單片機c語言進行編程,已經成為單片機軟體開發的主流,作為一門綜合性的技術和參與開發的大型軟體系統,單片機開發人員最好能夠掌握基本的c語言編程。
(9)單片機c語言論壇擴展閱讀:
SCM語言
MCU支持三種高級語言,即PL/M、C和BASIC。C語言是一種通用的編程語言,其碼率高,數據類型和運算符豐富,並具有良好的程序結構,適用於各種應用程序的設計,是一種廣泛應用的單片機編程語言。
單片機的C語言採用C51編譯器(簡稱C51)。C51生成的目標代碼短小、快速、存儲空間小,符合C語言的ANSI標准,生成的代碼遵循Intel目標文件格式,可與A51匯編語言或PL/M51語言目標代碼混合使用
⑩ 求51單片機C語言編程
#include<reg52.h>
#include<intrins.h>
#define uintunsignedint
sbitk1=P3^2;
sbitbuz=P2^3;
voiddelay(uintt);//延時程序
voidinit();
voidmain()
{
init();
P1=0xfe;
while(1);
}
voiddelay(uintt)//延時程序
{
uinti,j;
for(i=t;i>0;i--)
for(j=112;j>0;j--);
}
voidinit()
{
IT0=0;
EX0=1;
EA=1;
}
voidcroled()interrupt0
{
buz=0;
delay(10);
if(k1==0)
{
while(k1==0);
P1=_crol_(P1,1);
buz=1;
}
}