導航:首頁 > 編程語言 > c8051編程

c8051編程

發布時間:2022-02-02 09:16:20

A. 關於C8051的學習

8051單片機學習筆記/概要/總結/備忘
*.I/O引腳和I/O埠
P0(P0.7~P0.0)
1.P0是一個漏極開路型准雙向I/O口.
2.在訪問外存時, 它是數據匯流排和地址匯流排的低8位分時復用介面.
3.在EPROM編程時, 它接收指令位元組; 在驗證程序時, 輸出指令位元組, 並要求外接上拉電阻.

P1(P1.7~P1.0) 1.P1口是帶內部上拉電阻的8位雙向I/O口, 它是通用I/O口.
2.在EPROM編程和程序驗證時, 它接收低8位地址.
P2(P2.7~P2.0) 1.P2是帶內部上拉電阻的8位雙向I/O口.
2.在訪問外存時, 它輸出8位高地址.
3.在對EPROM編程時和程序驗證時, 它接收8位高地址.
P3(P3.7~P3.0) 1.P3是帶內部上拉電阻的8位雙向I/O口, 它是雙功能I/O口.
2.除基本輸入/輸出功能外, 每個引腳還有特殊功能.

I/O口 特殊/專用功能
P3.0 RXD:串列數據接收
P3.1 TXD:串列數據發送
P3.2 /INT0:外部中斷0輸入請求
P3.3 /INT1:外部中斷1請求輸入
P3.4 T0:定時器0外部計數脈沖輸入
P3.5 T1:定時器1外部計數脈沖輸入
P3.6 /WR:外部數據存儲器寫信號
P3.7 /RD:外部數據存儲器讀信號

*.復位寄存器狀態

寄存器
內容
寄存器
內容

PC 0000H TMOD 00H
A 00H TCON 00H
B 00H TH0 00H
PSW 00H TL0 00H
SP 07H TH1 00H
DPTR 0000H TL1 00H
P0~P3 0FFH SCON 00H
IP XXX00000B SBUF XX
IE 0XX00000B PCON 00H

*.特殊功能寄存器

特殊功能寄存器
功能名稱
地址
復位狀態

B 通用寄存器 F0H 00H
A 累加器 E0H 00H
PSW 程序狀態字 D0H 00H
IP 中斷優先順序控制 B8H XXX0000B
P3 P3埠 B0H 0FFH
IE 中斷使能控制 A8H 0XX00000B
P2 P2埠 A0H 0FFH
SBUF 串列發送/接收緩沖器 99H XXH
SCON 串列口控制 98H 00H
P1 P1埠 90H 0FFH
TH1 T1定時器高8位 8DH 00H
TH0 T0定時器高8位 8CH 00H
TL1 T1定時器低8位 8BH 00H
TL0 T0定時器低8位 8AH 00H
TMOD 定時器/計數器方式控制 89H 00H
TCON 定時器控制 88H 00H
PCON 電源控制 87H 00H
DPH 地址寄存器高8位 83H 00H
DPL 地址寄存器低8位 82H 00H
SP 堆棧指針 81H 07H
P0 P0埠 80H 0FFH

*.可位定址的特殊功能寄存器

寄存器名
D7
D6
D5
D4
D3
D2
D1
D0

電源控制寄存器 PCON SMOD GF1 GF0 PD IDL
波特率倍乘位 用戶標志 用戶標志 掉電方式位 待機方式位
定時器方式控制寄存器 TMOD GATE C/-T M1 M0 GATE C/-T M1 M0
T1門控位 T1定時器/計數器選擇 T1工作方式選擇 T0門控位 T0定時器/計數器選擇 T0工作方式選擇
程序狀態字 PSW CY AC F0 RS1 RS0 OV P
進位標志 輔助進位標志 用戶標志 工作寄存器組選擇標志 溢出標志 奇偶標志
中斷優先順序控制器 IP PS PT1 PX1 PT0 PX0
串口優先順序設置 T1優先順序設置 /INT1優先順序設置 T0優先順序設置 /INT0優先順序設置
中斷使能寄存器 IE EA ES ET1 ETX ET0 EX0
CPU總中斷使能 串口中斷使能 T1中斷使能 /INT1中斷使能 T0中斷使能 /INT0中斷使能
串口控制寄存器 SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
串口工作方式選擇位 允許接收 發送數據第9位 接收數據第9位 發送完成中斷標志 接收數據中斷標志
定時器控制寄存器 TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
T1溢出標志 T1運行控制位 T0溢出位 T0運行控制位 /INT1中斷標志 /INT1觸發方式 /INT0中斷標志 /INT0觸發方式

*.中斷系統

中斷源
入口地址
長度
中斷允許
中斷標志
中斷優先順序位
觸發方式
中斷標志清零方式
同級內部優先順序

/INT0 0003H 8 EX0(IE.0) IE0(TCON.1) PX0(IP.0) IT0(TCON.0)
0:電平觸發
1:下降沿觸發
電平觸發時需軟體清零 最高
T0 000BH 8 ET0(IE.1) TF0(TCON.5) PT0(IP.1) 無需軟體清零
/INT1 0013H 8 EX1(IE.2) IE1(TCON.3) PX1(IP.2) IT1(TCON.2) 電平觸發時需軟體清零
T1 001BH 8 ET1(IE.3) TF1(TCON.7) PT1(IP.3) 無需軟體清零
串口 0023H 8 ES(IE.4)
RI(SCON.0)
TI(SCON.1)
PS(IP.4) 需軟體清零 最低

*.定時器/計數器工作方式

M1
M0
工作方式
功能

0 0 方式0 13位計數器
0 1 方式1 16位計數器
1 0 方式2 可自動重新裝入的8位計數器
1 1 方式3 T0分為兩個獨立的8位計數器,T1停止

*.串口工作方式

SM0
SM1
方式
說明

0 0 0 位移寄存器方式(用於I/O擴展)
0 1 1 8位UART,波特率可變(T1溢出率/n)
1 0 2 9位UART,波特率為fosc/64或fosc/32
1 1 3 9位UART,波特率可變(TI溢出率/n)

注:表中n為32/2SMOD,SMOD為PCON的第7位波特率倍乘位

*.定時器/計數器初值的計算
環境:
晶振:12.0000MHz
定時器:T0
溢出條件:(TH0<<8|TL0)由0FFFFH變為0000H(0FFFFH+1 產生的進位置位TF0產生中斷)

假設延時時間為50ms,則:
頻率:ft = 12.0000MHz
時鍾周期:Tt = 1/ft (SI)
機器周期:Tm = 12*Tt = 12*1/(12*10^6),(SI) = 12*1/12 (us) = 1 (us)(前面的12是因為51是12分頻,即12個時鍾周期為1個機器周期)
所以:
50ms == 50000us == 50000個機器周期
由 0FFFFH 到 10000H 為 1個機器周期,則:
初值:start = 0FFFFH + 1H - 50000D = 65536D - 50000D = 15536D = 3CB0H
於是:TH0 = 0x3C,TL0 = 0xB0

若晶振頻率為:ft = 11.0592MHz
同樣:機器周期Tm = 12*Tt = 12*1/(11.0592*10^6),(SI) = 12/11.0592 (us) = 1.085069(us)
所以:
50ms == 50000us = 50000/1.085069 = 46080D 個機器周期
初值:start = 0FFFFH + 1H - 46080D = 65536D - 46080D = 19456D = 4C00H
於是:TH0 = 0x4C, TL0 = 0x00

*.串口通信中定時器工作方式下波特率初值計算以及晶振的選擇
當串口工作方式為1(8位UART),T1為定時器時:
k=13:定時器工作方式0; k=16, 工作方式1, k=8, 工作方式2, ...
T1溢出率 = Fosc/(12*(2k-初值)),即每秒溢出次數,Fosc:晶振頻率,*12:轉換為時鍾周期
所以 波特率 = T1溢出率/(32/2SMOD) = 2SMOD */32*T1溢出率 = 2SMOD * Fosc /(32*12*(2k-初值))
常用波特率:9600bps,192000bps,4800bps, ...
所以當波特率=9600bps, SMOD=0, k=8時:
波特率 = 2SMOD * Fosc /(32*12*(2k-初值)) = Fosc/(384*(256-初值)) = 9600
當晶振為11.0592Mhz時:9600=11.0592*106/(384(256-初值)),求得:初值=253D = 0FDH,此時恰為整數(即TH1=TL1 = 0xFD)
當晶振為12.0000MHz時:初值為252.744791, 不為整數
這就是為什麼在進行串列通信時要選擇11.0592MHz晶振, 不選擇12MHz晶振的原因.

*.由定時器1產生的常用波特率

波特率 bps
晶振頻率 Fosc
波特率倍乘
SMOD
定時器1

C/-T
模式
重裝載值

62500 12 1 0 2 0FFH
19200 11.0592 1 0 2 0FDH
9600 11.0592 0 0 2 0FDH
4800 11.0592 0 0 2 0FAH
2400 11.0592 0 0 2 0F4H
1200 11.0592 0 0 2 0E8H
137500 11.0592 0 0 2 1DH
110 6 0 0 2 72H
110 12 0 0 1 0FEEBH

B. 如何用c8051F330 編程

#define uchar unsigned char
sbit led =P1^3;
void delay (uchar a);
void main ()
{ P1MDIN |=0x08;
P1MDOUT=0x08; //設置io埠為推挽模式
while (1)
{
led =~led;
delay(100) ;

}

}
void delay (uchar a)

C. 求推薦IAR For c8051 c語言編程資料

IAR的C實際上是EC++,即所謂的嵌入式C++,與標準的C和C++略有不同,但無論如何,C與C++這一塊知識都是一樣的,本身與硬體關系不大多。
另一方面,C語言作為一種比較接近低層的語言,在不同的系統上都會做一些與硬體有關的擴展,這一部分,可以查系統附帶的幫助手冊,再結合系統的一些例子程序,動手做一下。51系統有個好處就是它的匯編比較簡單,寫完程序看看生成的匯編代碼就基本上可以確定效果。
國內8051還是Keil用的多,IAR確實用的少,資料也少。用IAR的好處是它支持的CPU種類很多,寫好的C代碼比較方便在多種CPU之間移植。當然,這個方便也是相對的,實際上很有限。所以,如果你的程序不會在多種CPU上進行移植,還是用Keil吧,就8051來說,還是Keil比較專業。

D. c8051f330 這款單片機燒寫程序

1、C8051F330通常的燒寫辦法應該是利用離線編程工具(如U-EC5)和軟體(Silicon C8051F編程器V6.00)。在線模擬模式也可下載程序。
2、由於F330支持對FLASH的擦寫。感覺能做個課題,來支持串口升級程序方案。(但這不像STC的串口編程。有這功夫,估計項目也做完了。建議,直接購買離線編程器,120元左右,還支持在線模擬。)

E. C8051F系列單片機開發與C語言編程

你這是什麼問題?我沒看懂啊?

F. silicon laboratories ide 和Keil C在C8051編程中只用一個就可以嗎

silicon laboratories IDE 其實包含有 Keil C 的試用版。
試用版對程序有 2K 的限制。

如果你做的項目代碼不超過2K,直接用IDE附帶的試用版就可以了;
如果代碼超過了2K, 則需要正式版的 KEIL C;

G. C8051系列單片機的C語言編程問題

交叉開關引腳分配時出現問題

當交叉開關配置寄存器XBR0 XBR1 和XBR2 中外設的對應允許位被設置為邏輯1時,交叉開關將埠引腳分配給外設。

因為交叉開關寄存器影響器件外設的引出腳,所以它們通常在外設被配置前由系統的初試化代碼配置,一旦配置完畢將不再對其重新編程。

交叉開關寄存器被正確配置後,通過將XBARE(XBR2.6)設置為邏輯1,來使能交叉開關,在XBARE被設置為邏輯1之前,埠0-3的輸出驅動器被禁止,以防止對交叉開關寄存器和其它寄存器寫入時在埠引腳上產生爭用。

H. C8051F單片機編程的問題

P1MDIN =0x07;

XBR0 =0x1F;

XBR1 =0x20;

XBR3 =0x01;

XBR2 =0x48;

I. silicon c8051f 編程器 ver6.00 使用說明

還是用Keil吧,安裝c8051的驅動後用著比新華龍的好用的多了

J. 關於C8051單片機控制電機轉動的編程

#define uchar unsigned char
#define uint unsigned int

sbit KEY1 = P3^2; //步進電機逆時針方向轉
sbit KEY2 = P3^3; //步進電機順時針方向轉
sbit KEY3 = P3^4; //步進電機調速
uchar step = 0;
bit AB_flag = 0;
unsigned char code A_Rotation[8]={0x08,0x18,0x10,0x30,0x20,0x60,0x40,0x48}; //順時針轉表格
unsigned char code B_Rotation[8]={0x48,0x40,0x60,0x20,0x30,0x10,0x18,0x08}; //逆時針轉表格
/********************************************************************
* 名稱 : Delay_1ms()
* 功能 : 延時子程序,延時時間為 1ms * x
* 輸入 : x (延時一毫秒的個數)
* 輸出 : 無
***********************************************************************/
void Delay(uint i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void KEY(void)
{
if(KEY1 == 0) //按P3.2,實現步進電機的逆時針轉動
{

閱讀全文

與c8051編程相關的資料

熱點內容
git伺服器如何啟動 瀏覽:39
noi演算法 瀏覽:459
zip解壓縮是電腦自帶的嗎 瀏覽:643
魔術演算法術嗎 瀏覽:783
復式五肖演算法 瀏覽:721
海康威視設備已加密 瀏覽:663
自適應路由演算法 瀏覽:315
pythonxlwt寫入一列 瀏覽:995
性之助app哪裡可以下載 瀏覽:414
安卓如何自己改圖標 瀏覽:848
如何去掉app資源庫的建議 瀏覽:730
中興研發面試要寫演算法嗎 瀏覽:65
linux系統配置文件 瀏覽:601
php登錄網頁模板 瀏覽:931
windownginxphp 瀏覽:509
resync命令 瀏覽:536
dos命令手冊 瀏覽:287
矽谷編程二維數組 瀏覽:41
inside游戲什麼時候移植安卓 瀏覽:944
極光安卓是什麼 瀏覽:541