❶ 單片機c語言每句詳解(只限今天解答)
網路入學蠢余任務:指定 S1 為P1口搭檔旦第0位 S2為 P1口 第1位
LED1為P0口第0位 LED2為P0口第1位知擾
LED1=S1; //直接將P1.0 送到P0.0
LED2=S2; //直接將P1.1 送到P0.1
❷ 幫我解釋下單片機c語言程序
/********
//p1.0波形為:
//1、10ms為周期的方波或持續的高、低電平(與flag、p1.0初始值有關),持續2秒。
//2、持續的高、低電平或10ms為周期的方波(與flag、p1.0初始值有關),持續2秒。
//3、重復1、2步驟。
*********/
#include
unsigned
int
t02s;
unsigned
char
t05ms;
bit
flag;
void
main(void)
{
tmod=0x01;
//初始化定時器。
//可以對照單片機pdf相應章節,按位對比。
//此處設置定時器0工作於「16
位定時器/
計數器,tl0、th0
全用」模式。
th0=(65536-500)/256;
//初始化定時/計數器高位元組。
tl0=(65536-500)%256;
//初始化。。。。。。低位元組。
tr0=1;
//啟動定時器0。
//以下兩句開啟定時器中斷,缺一不可。
et0=1;
//允許定時器0中斷。
ea=1;
//開啟全局中斷。
while(1);
//循環,整個程序交由定時中斷控制。
}
//此處為定時器中斷子程序,每次定時器溢出,進入此段程序。
//根據參數定義,每5ms中斷一次。
//定時器中斷後,計數不停止,但是需要重新初始化定時/計數器。
void
t0(void)
interrupt
1
using
0
{
//重新「初始化定時/計數器」高、低位元組。
th0=(65536-500)/256;
tl0=(65536-500)%256;
//每次中斷,t02s
加
1。
t02s++;
//增加400次後(5ms
×
400
=
2s),flag標志取反。
if(t02s==400)
{
t02s=0;
flag=~flag;
}
//若中斷時flag標志為0,p1.0口取反。
if(flag==0)
{
p1_0=~p1_0;
}
}
❸ 單片機c語言程序解讀,,求解釋。。
include <reg52.h>
#include <intrins.h>
是頭文件
#define uchar unsigned char
#define uint unsigned int
是宏定義
uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf
};
這襪搭是數碼管的顯示不同數的代碼
uchar code Table_OF_Digits[][8]=
{
{0,9,10,1,2,10,2,5},
{2,1,10,5,7,10,3,9},
};
要顯示的數
void DSY_Show() interrupt 1
{
TH0 = (8191-4000)/32;
TL0 = (8191-4000)%32;
P3 = _crol_(P3,1);
P0 = DSY_CODE[Table_OF_Digits[i][j]];
j = (j+1)%8;
if(++t!=350) return;
t = 0;
i = (i+1)%2;
}
設定動態掃描間隔時間和要顯示 的數
其中
TH0 = (8191-4000)/櫻游32;
TL0 = (8191-4000)%32; 是設定動態掃描間隔時間
P3 = _crol_(P3,1);
P0 = DSY_CODE[Table_OF_Digits[i][j]];
j = (j+1)%8;
if(++t!=350) return;
t = 0;
i = (i+1)%2;
是要動態顯示的數及選通控制
void main()
{
P3 = 0x80;
TMOD = 0x00;
TH0 = (8191-4000)/32;
TL0 = (8191-4000)%32;
IE = 0x82;
TR0 = 1;
while(1);
}
其中
TMOD = 0x00;
TH0 = (8191-4000)/脊好銷32;
TL0 = (8191-4000)%32;
IE = 0x82;
TR0 = 1;
是確定定時器的工作模式及初始化定時器
❹ 單片機C語言程序分析
uint8_t *ptr uint8_t len 這是傳擾襪入參數。 len可能是長度,ptr可能指向的是一個數組。
^= 按位異或後賦值。
crc ^= *ptr++; //首先將數組第一位異或後復制給Crc。之後ptr再向前一步,簡單理解就是指向數組的下一位。
for(i = 0;i < 8;i++) { if(crc & 0x01) crc = (crc >> 1) ^ 0x8C; else crc >>= 1; }
//將取賣閉到數組第一位值,與0x01上。如果非零,crc就需要右移一位,再與0x8C異或。否則右移1位。每位數組值要做8次。
while(len--) //表示要判斷數組內len個值。或則說是取得數組內len長度的元素個數。
return crc; //len個數組值都作完以後,將Crc返回。
我想你需要了解一下 0x01的意義,0x8C的意中李裂義。
0x01 = 0000 0001
0x8c = 1000 1100
沒看到啊,已經有人答完了。哎,早知道就不寫這么多字了。
❺ 單片機c語言程序,看不懂 ,求講解
本文分三個步驟介紹12864的內部資源原理,指令集詳細講解,以及應用例子。
對12864的所有操作概括起來有4種:
1)、讀忙狀態(同時讀出指針地址內容),初始化之後每次對12864的讀寫均要進行忙檢測。
2)、寫命令:所有的命令可以查看指令表,後續講解指令的詳細用法。寫地址也是寫指令。
3)、寫數據:操旦哪凱作對象有DDRAM、CGRAM、GDRAM。
4)、讀數據:操作對象也是DDRAM、CGRAM、GDRAM。
關於編碼在DDRAM中的存儲需要說明事項如下:
1)、每次對DDRAM的操作單位是一個字,也就是2個位元組,當往DDRAM寫入數據時,首先寫地址,然後連續送入2個位元組的數據,先送高位元組數據,再送低位元組數據。讀數據時也是如此,先寫地址,然後讀出高位元組數據,再讀出低位元組數據(讀數據時注意先假讀一次)。
2)、顯示ASCII碼半寬字元時,往每個地址送入2個位元組緩裂的ASCII編碼,對應屏幕上的位置就會顯示2個半寬字元,左邊的為高位元組字元,右邊的為低位元組字元。
3)、顯示漢字時,漢字編碼的2個位元組必須存儲在同一地址空間中,不能分開放在2個地址存放,否則顯示的就不是你想要的字元。每個字中的2個位元組自動結合查找字模並顯示字元。所以,如果我們往一個地址中寫入的是一個漢字的2位元組編碼就會正確顯示該字元,編碼高位元組存放在前一地址低位元組,編碼低位元組模喚存放在後一地址高位元組,顯然他們就不會結合查找字模,而是與各地址相應位元組結合查找字模。
❻ 請解釋下單片機中的C語言程序
在你include的頭文件里肯定有ADDO的定義,一定是個輸入埠,dat|=ADDO代表
dat=dat|ADDO;之後dat<<=1就是dat=dat<<1,左移1位,i==7就是最後1位的時候又采樣1次。
❼ 單片機C語言程序,看不懂,求講解
「T0中斷服務程序不是一個子程序嗎?但沒看見在主程序中調用這個子程序啊,求講解這個程序命令的運行過程,定時器怎麼中斷的?」
該子程序是在硬體產生中斷的時候,跳轉到相應中斷入口後,再跳轉到這個中斷服務程序的。請注意函數後面的「interrupt x」聲明,這是C51的擴展內容。
「用示波器測波形是測p1.0引腳,為什麼是這個引腳,怎麼確定的?咐族仿p1_0不是個變數名嗎?」
P1_0這個符號在前面的頭文件穗漏 t89c51cc02.h 中有定義。至於「為什麼是這個引腳」,是由硬體設計及本程序共同確定的。P1_0(不是你寫的p1_0,C語言要區分衡纖大小寫哦)代表P1口的第0管腳,在頭文件中通過sbit定義。
「為什麼T0中斷服務程序和主程序中都有T0的初值,設置還是一樣,他們有什麼關系?」
主程序前面的是對Timer0初始化,賦以初值。執行 TR0 = 1; 這一句以後,Timer0就開始運行了——TL0與TH0組成的13位計數器開始不斷遞增。當13位全部為1之後,再遞增就全部為0,此時溢出事件會觸發產生定時器0,同時計數器仍然在繼續計數——為了讓時間間隔保持一致,就需要再度將計數器賦以初值。