1. 單片機中特殊功能寄存器的定義與初始化的區別
這兩者的區別大了呀。。。
SCON寄存器在單片機中的地址是0x98...
sfr
SCON=ox98,是一個特殊寄存器的定義,也就是告訴你SCON的地址是0x98.當然這個是你目前不用考慮的。因為頭文件(reg52.H等,就是在編寫程序開頭寫的那個)都已經寫好了。可以打開keil->c51->ASM->reg52.INC查看。。裡面都是寄存器的定義。
SCON=0x52。。首先SCON寄存器的標志位有:
SM0,SM1,SM2,REN,TB8,RB8,TI,RI.
SCON=0X52,其實就是定好標志位的值。相當於:
SM0=0;
SM1=1;
SM2=1;
REN=0;
TB8=0;
RB8=0;
TI=1;
RI=0;
也可以寫成上述形式,因為SCON地址可以被8整除(凡是地址可以被8整除的都可以位定址),可以位定址(即可以一個個位的賦值)
希望採納,如有不懂,可以HI我。。。
2. 要設置51系列單片機串口工作於所需工作方式,應是對哪個專用寄存器進行操作
控制51單片機串列口的控制寄存器共有兩個:特殊功能寄存器SCON和PCON。下面對這兩個寄存器各個位的功能予以詳細介紹。
1.串列口控制寄存器SCON
串列口控制寄存器SCON的格式如表4.4:
SM0、SM1:串列口4種工作方式的選擇位。
SM2:允許方式2和3的多機通訊控制位。在方式2或3中,如果SM2置為l,則接收到的第9位數據(RB8)為0時不激活RI。在方式1時,如果SM2=1,則只有收到有效的停止位時才會激活RI。在方式0時,SM2必須清0。
REN:允許串列接收位。由軟體置1或清0。REN=l允許接收,REN=O則禁止接收。
TB8:是工作在方式2和3時,要發送的第9位數據。需要時由軟體置1或清0。在許多的通訊協議中該位是奇偶校驗垃。在多機通訊中用來表示是地址幀或是數據幀,TB8=1為地址幀,TB8=0為數據幀。
RB8:當工作在方式2和3時,為接收到的第9位數據。在多機通訊中為地址幀或數據幀的標識位。在方式1,如果SM2=0,RB8是接收到的停止位。在方式0,不使用RB8。
D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 RB8 TI RI
T1:發送中斷標志位,在方式O串列發送第8位數據結束時由硬體置1,或在其它方式串列發送停止位的開始時置1。TI=1時,申請中斷,CPU響應中斷後,發送下一幀數據。TI必須由軟體清0。 表4.4 串列口控制寄存器SCON的格式
RI:接收中斷標志位,在方式O串列接收到第8位數據結束時,由硬體置1。在其它方式中,串列接收到停止位的中間點時置1。RI=1時申請中斷,要求CPU取走數據。但在方式1中,SM2=1時,若未收到有效的停止位,不會對RI置1。RI必須由軟體清0。
SCON的所有位都能由軟體清0。
2.特殊功能寄存器PCON
特殊功能寄存器PCON沒有位定址功能。PCON的格式如表4.5:
表4.5 特殊功能寄存器PCON的格式
D7 D6 D5 D4 D3 D2 D1 D0
SMON × × × × × × ×
SMOD:波特率系數選擇位。
3.串列口工作方式
方式0:8位移位寄存器輸入/輸出方式。在擴展I/O埠外接移位寄存器時常用,其波特率固定為Fosc/12, Fosc為時鍾頻率;
方式1:10位非同步通信方式。其中1個起始位,8個數據位和一個停止位,其波特率計算公式為:波特率=2的SMOD次方/32*(定時器T1的溢出率);
方式2,3:11位非同步通信方式,其中一個起始位,8個數據位,1個附加的第9位和1個停止位,方式2和方式3僅只有波特率不同,方式2的波特率=2的SMOD次方/64*Fosc,方式3的波特率=2的SMOD次方/32*(定時器T1的溢出率)。
此次系統串列口工作方式是:01。
SM0、SM1兩位為01時,串列口以方式1上作,方式1時串列口被控制為波特率可變的8位非同步通訊介面。方式1的波特彩由下式確定:
方式l波特率=2的(SMOD-5)次方*定時器1的溢出率
式中SMOD為PCON寄存器的最高位的值(0或1)。
因為串列口用於連接列印機,所以這里只介紹串列口輸出情況。
串列口以方式1輸出時,數據位由TXD端輸出,發送—幀信息為10位,1位起始位0,8位數據位(先低位)和1位停止位1,CPU執行一條數據寫發送緩沖器SBUF的指令,就啟動發送。當發送完數據位,置「1」中斷標志TI。
3. 單片機scon=0x00是什麼意思呀
SCON是個寄存器,用於串列通訊的控制。SCON=0X00中的八位分別為SM0 SM1 SM2 REN TB8 RB8 TI RI (從左到有排列)。若為0X00時,既把它們的值都為0,選擇方式0。若為0X80既SMO為1其它為0,選擇工作方式1。通過「賦值」的方式選擇地址(SM0 SM1 SM2 REN TB8 RB8 TI RI )而控制不同的功能。
4. 瑕佽劇疆51緋誨垪鍗曠墖鏈轟覆鍙e伐浣滀簬鎵闇宸ヤ綔鏂瑰紡,搴旀槸瀵瑰摢涓涓撶敤瀵勫瓨鍣ㄨ繘琛屾搷浣
1. 鏁版嵁緙撳啿瀵勫瓨鍣⊿BUF
SBUF 鏄鍙浠ョ洿鎺ュ誨潃鐨勪笓鐢ㄥ瘎瀛樺櫒銆傜墿鐞嗕笂錛屽畠瀵瑰簲鐫涓や釜瀵勫瓨鍣錛屽嵆涓涓鍙戦佸瘎瀛
鍣ㄤ竴涓鎺ユ敹瀵勫瓨鍣錛孋PU 鍐橲BUF 灝辨槸淇鏀瑰彂閫佸瘎瀛樺櫒錛涜籗BUF 灝辨槸璇繪帴鏀跺瘎瀛樺櫒銆傛帴
鏀跺櫒鏄鍙岀紦鍐茬殑錛屼互閬垮厤鍦ㄦ帴鏀朵笅涓甯ф暟鎹涔嬪墠錛孋PU 鏈鑳藉強鏃剁殑鍝嶅簲鎺ユ敹鍣ㄧ殑涓鏂錛屾病
鏈夋妸涓婁竴甯х殑鏁版嵁璇昏蛋鑰屼駭鐢熶袱甯ф暟鎹閲嶅彔鐨勯棶棰樸傚逛簬鍙戦佸櫒錛屼負浜嗕繚鎸佹渶澶х殑浼犺緭閫熺巼錛
涓鑸涓嶉渶瑕佸弻緙撳啿錛屽洜涓哄彂閫佹椂CPU 鏄涓誨姩鐨勶紝涓嶄細浜х敓閲嶅彔闂棰樸
2. 鐘舵佹帶鍒跺瘎瀛樺櫒SCON
SCON 鏄涓涓閫愪綅瀹氫箟鐨8 浣嶅瘎瀛樺櫒錛岀敤浜庢帶鍒朵覆琛岄氫俊鐨勬柟寮忛夋嫨銆佹帴鏀跺拰鍙戦侊紝鎸
紺轟覆鍙g殑鐘舵侊紝SCON 鍗沖彲浠ュ瓧鑺傚誨潃涔熷彲浠ヤ綅瀵誨潃錛屽瓧鑺傚湴鍧98H錛屽湴鍧浣嶄負98H~9FH銆
3. 鎺у埗瀵勫瓨鍣≒CON
鎺у埗瀵勫瓨鍣≒CON 涔熸槸涓涓閫愪綅瀹氫箟鐨8 浣嶅瘎瀛樺櫒錛屼粎鏈楂樹綅SMOD 涓庝覆鍙g殑鎺у埗鏈夊叧銆係MOD 鏄涓茶岄氫俊娉㈢壒鐜囩郴鏁版帶鍒朵綅錛屽綋涓插彛宸ヤ綔鍦ㄥ伐浣滄柟寮1銆2 鏃訛紝鑻ヤ嬌鐢
T1 浣滀負娉㈢壒鐜囧彂鐢熷櫒鍏禨MOD=1 鍒欐嘗鐗圭巼鍔犲 銆
鍒濆嬪寲紺轟緥
void _init(void)
{
TMOD = 0x20; //瀹氭椂鍣═1瀹氫箟涓烘ā寮2
TL1 = 0xFD; TH1 = 0xFD; //璁劇疆娉㈢壒鐜囦負9600bps
PCON = 0x00; //SMOD=0
SCON = 0x70; //SM0,SM1=01--閫夋嫨宸ヤ綔鏂瑰紡1
//SM2=1--澶氭満鎺у埗浣嶇疆1
//REN=1錛嶏紞紱佹㈡帴鏀
//TB8=0錛嶏紞姝ゆ柟寮忔棤瑕佸彂閫佺9浣嶆暟鎹
//RB8=0錛嶏紞姝ゆ柟寮忔棤鎺ユ敹鍒扮殑絎9浣嶆暟鎹
//TI=0錛嶏紞鍙戦佷腑鏂鏍囧織娓0
//RI=0錛嶏紞鎺ユ敹涓鏂鏍囧織娓0
TR1 = 1; //鍚鍔ㄥ畾鏃跺櫒T1
}