原创 51單片機STC89C52 串口接收(中斷)

ORG 0000H LJMP MAIN ORG 0023H LJMP UARTISR ;串口中斷服務函數 MAIN: MOV TMOD,#20H ;定時器1工作方式2 MOV TH1,#0FDH ;9600BPS MOV TL1,#0F

原创 Keil C51對C語言的關鍵詞擴展之三: bdata

使用bdata定義的變量即可字尋址,也可比特位尋址。 Keil C51編譯器把使用bdata定義的變量放置在8051內部RAM可位尋址區。 bdata定義的變量必須爲全局變量,不能在任一函數內部定義bdata類型的變量。 bdata關鍵詞

原创 51單片機STC89C52 矩陣鍵盤數碼管顯示

WELA BIT P2.7 DULA BIT P2.6 DIOLA BIT P2.5 FM BIT P2.3 ORG 0000H SETB DIOLA MOV SP,#0E0H LOOP0: LCALL key_Scan JZ LOOP

原创 51單片機STC89C52 iic

SCL BIT P2.1 SDA BIT P2.0 ORG 0000H LJMP MAIN ORG 0050H MAIN: MOV SP,#30H MOV P1,#0FFH ;滅LED MOV R6,#2 ;R6保存AT24C02內部待

原创 Keil C51對C語言的關鍵詞擴展之四: bit

bit關鍵詞可定義位變量,可用於函數參數、返回值類型。 static bit done_flag = 0; /* 位變量*/ bit testfunc ( /* 返回值類型爲位變量 */ bit

原创 51單片機STC89C52 串口發送字符

BEEP BIT P2.3 LCDEN BIT P3.4 LED BIT P1.0 ORG 0000H LJMP MAIN MAIN: MOV TMOD,#20H MOV TH1,#0FDH MOV TL1,#0FDH SETB TR

原创 Keil C51對C語言的關鍵詞擴展之十三: sfr

sfr用來定義特殊功能寄存器。用法如下: sfr name = address; name 爲寄存器名字 address 爲寄存器的地址 示例: sfr P0 = 0x80; /* P0口,地址爲0x80 */ sfr P1 = 0

原创 Keil C51對C語言的關鍵詞擴展之八: far

far的出現,是Keil 編譯器爲了支持新出現的8051家族增強型MCU,這些增強型MCU可能擁有大於64KB的存儲器。使用far可訪問擴展的RAM,使用const far可訪問擴展的ROM。 NXP 51MX架構51單片機提供通過通用指

原创 51單片機STC89C52 AD模數轉換

CSDA BIT P3.2 WRR BIT P3.6 RDD BIT P3.7 WELA BIT P2.7 DULA BIT P2.6 CSAD BIT P0.7 DIOLA BIT P2.5 ORG 0000H LOOP0: MOV

原创 Keil C51對C語言的關鍵詞擴展之二: alien

alien關鍵詞主要是爲了C51編譯器與PL/M-51編譯器兼容。 在C51編譯器中調用PL/M-51函數,須使用alien聲明該函數,如下: extern alien char plm_func (int, char); char

原创 Keil C51對C語言的關鍵詞擴展

爲了支持8051系列單片機特性,Keil Cx51編譯器爲C語言擴展了衆多關鍵詞: _at_ far sbit alien idata sfr bdata interrupt sfr16 bit large small code

原创 Keil C51對C語言的關鍵詞擴展之一: _at_

 _at_關鍵詞用於在定義變量時指定變量所在地址。 _at_關鍵詞使用示例如下: struct link { struct link idata *next; char code *test; }; struct li

原创 51單片機STC89C52 DA數模轉換

CSDA BIT P3.2 WRR BIT P3.6 WELA BIT P2.7 DULA BIT P2.6 ORG 0000H LOOP0: MOV P0,#0FFH ;關數碼管顯示 SETB WELA CLR WELA CLR DU

原创 Keil C51對C語言的關鍵詞擴展之五: code

code 指定存儲位置位於程序存儲器。程序存儲器只讀,因此code類型的變量,是無法再次賦值的。 unsigned char code ary[ ] = :"Read only"; /* 數組ary位於程序存儲器 */ ary[0]='a