單片機(jī)常用的宏及硬件端口命名_第1頁
單片機(jī)常用的宏及硬件端口命名_第2頁
單片機(jī)常用的宏及硬件端口命名_第3頁
單片機(jī)常用的宏及硬件端口命名_第4頁
單片機(jī)常用的宏及硬件端口命名_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、/常用的宏及硬件端口命名config.c/*#ifndef_CONF_#define_CONF_/*MCU=1Keil C51 8051MCUMCU=2MPLAB IDEPICMCU* */#defineMCU1/*#ifMCU=1#include<reg51.h>#definePAP0#definePBP1#definePCP2#definePDP3#defineTABROMcode#endif/-#ifMCU=2#include<PIC.h>#defineTABROMconst/*簡化端口符號(hào)名*/#definePAPORTA#definePBPORTB#defin

2、ePCPORTC#definePDPORTD#definePEPORTE/*RA0=PA,0.RA7=PA,7RB0=PB,0.RB7=PB,0RC0=PC,0.RC7=PC,7RD0=PD,0.RD7=PD,0*/#define TATRISA#defineTBTRISB#define TCTRISC#defineTDTRISD#define TETRISE#endif/*bitsys;/系統(tǒng)標(biāo)志位/* typedef unsigned charuchar;typedefunsigned charUchar;typedefunsigned charUCHAR;typedefunsigned

3、charbyte;typedefunsigned charBYTE;typedefunsigned charbyt;typedefunsigned charBYT;typedefsigned charsbyte;typedefsigned charSBYTE;/-typedefunsigned intuint;typedefunsigned intUint;typedefunsigned intUINT;typedefunsigned intwbyte;typedefunsigned intWBYTE;typedefunsigned intWbyte;typedefunsigned intwb

4、yt;typedefunsigned intword;typedefunsigned intWORD;/-typedefunsigned longDword;typedefunsigned longDWORD;typedefunsigned longulong;typedefunsigned longUlong;/-typedefbitbool;typedefbitBOOL;/*#defineLOW(w)(BYTE)(w)#defineHIGH(w)(BYTE)(WORD)(w)>>8)&0XFF)/*某位置1 清0*/#defineBSET(BIT) BIT=1#defi

5、neBCLR(BIT) BIT=0#defineTESTB(b,offset)(1&(b)>>(offset)#defineSETB(b,offset)(b)|=(1<<(offset)#defineCLRB(b,offset)(b)&=(1<<(offset)#defineRIGHTB(b,n)(b)>>1)|n)#defineLEFTB(b,n)(b)<<1)|n)#defineMAX(a,b) (a)>(b)?(a):(b)#defineMIN(a,b)(a)<(b)?(a):(b)#defineTR

6、UE1#defineFLASE0#defineON1#defineOFF0/*unionundwstructstchucharchdl;ucharchdh;ch;uintdatw;dw;/*-union undwxy;dw.ch.chdl=0x65;dw.ch.chdh=0x85;dw.datw=0x8565;xy.ch.chdl=dw.ch.chdl;xy.ch.chdh=dw.ch.chdh;xy.datw=0x8565;*/#endif/*/ 8051外部中斷0 模塊/*INT0_HLOW=0外部中斷0低電平觸發(fā)INT0_HLOW=1外部中斷0負(fù)邊沿觸發(fā)* */#defineINT0_H

7、LOW1/*EXT0INT=1外部中斷0 中斷處理方式void ext0int(void)interrupt 0 /不用調(diào)用EXT1INT=2外部中斷0 查詢處理方式void ext0find(void)/須在其它程序中調(diào)用* */#defineEXT0INT2/* */TM0 初始化voidext0init(void)/* */voidext0init(void) TCON=INT0_HLOW; #if EXT0INT=1 BSET(EA); / EA=1; #endif/*#if EXT0INT=1void ext0int(void)interrupt 0/ fun();加入其它功能程序

8、#endif/-#if EXT0INT=2void ext0find(void)while(IE0=0);/ fun();加入其它功能程序#endif/*/ 8051外部中斷1 模塊/*INT1_HLOW=0x00外部中斷1低電平觸發(fā)INT1_HLOW=0x04外部中斷1負(fù)邊沿觸發(fā)* */#defineINT1_HLOW0X04/*EXT1INT=1外部中斷1 中斷處理方式void ext1int(void)interrupt 2 /不用調(diào)用EXT1INT=2外部中斷1 查詢處理方式void ext1find(void)/須在其它程序中調(diào)用* */#defineEXT1INT2/* */TM0

9、 初始化voidext1init(void)/* */voidext1init(void) TCON=INT1_HLOW; #if EXT1INT=1BSET(EA);/EA=1; #endif/*#if EXT1INT=1void ext1int(void)interrupt 2/ fun();加入其它功能程序 #endif/-#if EXT1INT=2void ext1find(void)while(IE1=0);/fun(); 加入其它功能程序#endif/*/TMR0 定時(shí)/時(shí)數(shù)器模塊/*TM0_CT=0X00TM0為定時(shí)方式TM0_CT=0X04TM0為計(jì)數(shù)方式* */#define

10、TM0_CT0/*TM0_MODE=0TM0工作于13位模式最大值8192TM0_MODE=1TM0工作于16位模式最大值65536TM0_MODE=2TM0工作于8位自動(dòng)加載模式最大值256TM0_MODE=3TM0工作于分立定時(shí)器模式最大值256* */#defineTM0_MODE0/*TM0INT=1TM1 中斷處理方式void intm0(void)interrupt 1 /不用調(diào)用TM0INT=2TMR1 查詢處理方式void tm0find(void)/須在其它程序中調(diào)用* */#defineTM0INT1/* */TM0 初始化voidtm0init(void)/* */#de

11、fine TM0MAX1000/-#if TM0_MODE=0#define TM0_VALH(65536-TM0MAX)/32#define TM0_VALL(65536-TM0MAX)%32#endif/-#if TM0_MODE=1#define TM0_VALHHIGH(65536-TM0MAX)#define TM0_VALLLOW(65536-TM0MAX)#endif/-#if TM0_MODE=2#define TM0_VALH(256-TM0MAX)#define TM0_VALL(256-TM0MAX)#endif/-#if TM0_MODE=3#define TM0_VA

12、LH(256-TM0MAX)#define TM0_VALL(256-TM0MAX)#endif/*voidtm0init(void)#ifTM0INT=1BSET(EA);BSET(ET0);#endifTMOD=(TM0_CT|TM0_MODE);TH0=TM0_VALH;TL0=TM0_VALL;BSET(TR0);/*#ifTM0INT=1void intm0(void)interrupt 1TH0=TM0_VALH;TL0=TM0_VALL;/ fun();加入其它功能程序BSET(sys); #endif /- #ifTM0INT=2void tm0find(void)while(

13、TF0=0);BCLR(TF0);TH0=TM0_VALH;TL0=TM0_VALL; / fun();加入其它功能程序BSET(sys); #endif /*/TMR1 定時(shí)/時(shí)數(shù)器模塊/*TM1_CT=0X00TM1為定時(shí)方式TM1_CT=0X40TM1為計(jì)數(shù)方式* */#defineTM1_CT0x00/*TM1_MODE=0X00TM1工作于13位模式最大值8192TM1_MODE=0X10TM1工作于16位模式最大值65536TM1_MODE=0X20TM1工作于8位自動(dòng)加載模式最大值256TM1_MODE=0X30TM1工作于分立定時(shí)器模式最大值256* */#defineTM1_

14、MODE0x10/*TM1INT=1TM1 中斷處理方式void intm1(void)interrupt 3 /不用調(diào)用TM1INT=2TMR1 查詢處理方式void tm1find(void)/須在其它程序中調(diào)用* */#defineTM1INT2/* */TM0 初始化voidtm1init(void)/* */#define TM1MAX200/-#if TM1_MODE=0#define TM1_VALH(65536-TM1MAX)/32#define TM1_VALL(65536-TM1MAX)%32#endif/-#if TM1_MODE=1#define TM1_VALHHIG

15、H(65536-TM1MAX)#define TM1_VALLLOW(65536-TM1MAX)#endif/-#if TM1_MODE=2#define TM1_VALH(256-TM1MAX)#define TM1_VALL(256-TM1MAX)#endif/-#if TM1_MODE=3#define TM1_VALH(256-TM1MAX)#define TM1_VALL(256-TM1MAX)#endif/*voidtm1init(void)#ifTM1INT=1BSET(EA);/EA=1BSET(ET1);/ET1=1#endifTMOD=(TM1_CT|TM1_MODE);T

16、H1=TM1_VALH;TL1=TM1_VALL;BSET(TR1);/TR1=1;/*#ifTM1INT=1void intm1(void)interrupt 3TH1=TM1_VALH;TL1=TM1_VALL;/fun(); 加入其它功能程序 #endif /- #ifTM1INT=2void tm1find(void)while(TF1=0);BCLR(TF1);/TF1=0;TH1=TM1_VALH;TL1=TM1_VALL;/fun(); 加入其它功能程序 #endif /*/ C51UART 串行通信 /*UART串行通信比特率設(shè)定UART_MODE=0X00模式0 固定比特率O

17、SC/12的移位式數(shù)據(jù)傳送UART_MODE=0X80模式1 可變比特率的串行數(shù)據(jù)傳送由TMR1或TMR2控制UART_MODE=0X40模式2 固定比特率OSC/32或OSC/64的移位式數(shù)據(jù)傳送UART)MODE=0XC0模式3 可變比特率的串行數(shù)據(jù)傳送由TMR1或TMR2控制* */#defineUART_MODE0X80/* TM1波特率產(chǎn)生方式 模式2 f=Fosc/12/32(MODE=0) f=Fosc/12/16(MODE=1) TH1十進(jìn)制十六進(jìn)制SMOD=0SMOD=1 -3FD960019200 -6FA48009600 -12F424004800 -24E8120024

18、00*/*多機(jī)通信啟用UART_TEL=0X00單機(jī)通信UART_TEL=0X20多機(jī)通信* */#defineUART_TEL0X00/*UART_REN=0X00單機(jī)發(fā)送UART_REN=0X10雙向通信* */#defineUART_REN0X10/*UARTINT=1UART 中斷處理方式void uartint(void)interrupt 4 /不用調(diào)用UARTINT=2外部中斷1 查詢處理方式void uartfind(void)/須在其它程序中調(diào)用* */#defineUARTINT2/* */TM0 初始化voiduartinit(void)/* */uchar dat;/接

19、收數(shù)據(jù)保存位置/*voiduartinit(void) SCON=(UART_MODE|UART_TEL|UART_REN); #if UARTINT=1BSET(EA);/EA=1;BSET(ES);/ES=1; #endif/* #if UARTINT=1void uartint(void)interrupt 4if(RI)BCLR(RI);/RI=0;dat=SBUF;elseBCLR(TI);/TI=0;/fun(); 加入其它功能程序 #endif/-#if UARTINT=2void uartfind(void)while(RI=0);dat=SBUF;BCLR(RI); /RI=

20、0;/return(dat);/fun(); 加入其它功能程序 #endif/*/ TMR0 定時(shí)/時(shí)數(shù)器模塊pictm0.c/*TM0_MODE=1RMR0為定時(shí)器工作方式TM0_MODE=2RMR0為計(jì)數(shù)器工作方式TM0_CHL=1計(jì)數(shù)上升沿觸發(fā)TM0_CHL=2計(jì)數(shù)下降沿觸發(fā)TM0_MODE=3RMR0為WDT看門狗工作方式* */#defineTM0_MODE1#defineTM0CHL0X00#ifTM0_MODE=1/定時(shí)器#defineTM0MD0X00#endif#ifTM0_MODE=2/計(jì)數(shù)器#defineTM0MD0X20/*#ifTM0_CHL=1#defineTM0C

21、HL0X00/計(jì)數(shù)上升沿觸發(fā)#endif#ifTM0_CHL=2#defineTM0CHL0X10/計(jì)數(shù)下降沿觸發(fā)#endif* */#endif#ifTM0_MODE=3/WDT看門狗#defineTM0MD0X08#endif/TM0初始化寄存器變量/void tm0init(void)/*TM0INT=1TM0 中斷處理方式void interrupt intm0(void)/不用調(diào)用TM0INT=2TMR0 查詢處理方式void tm0find(uchar tm0val)/須在其它程序中調(diào)用* */#define TM0INT1/*預(yù)分頻器分頻比率INTCON|=0XA0; /GIE=

22、1;T0IE=1;1.OPTION=0;/(1:2)*250=500us2.OPTION=1;/(1:4)*250=1000us3.OPTION=2; /(1:8)*125=1000us4.OPTION=3;/(1:16)*125=2000us5.OPTION=4;/(1:32)*156=4992us=5ms6.OPTION=6;/(1:128)*78=9984=10ms7.OPTION=N;/(1:N)*M* */#defineTM0_VAL2#ifTM0_VAL=1/0.5ms#defineTM0VAL(256-250)#defineTM0CON0#endif#ifTM0_VAL=2/1m

23、s#defineTM0VAL(256-250)#defineTM0CON1#endif#ifTM0_VAL=3/1ms#defineTM0VAL(256-125)#defineTM0CON2#endif#ifTM0_VAL=4/2ms#defineTM0VAL(256-125)#defineTM0CON3#endif#ifTM0_VAL=5/5ms#defineTM0VAL(256-156)#defineTM0CON4#endif#ifTM0_VAL=6/10ms#defineTM0VAL(256-78)#defineTM0CON6#endif#ifTM0_VAL=7/-#defineTM0V

24、AL(256-256)#defineTM0CON0#endif/*INTCON|=0XA0; /GIE=1;T0IE=1;1.OPTION|=0;/(1:2)*250=500us2.OPTION|=1;/(1:4)*250=1000us3.OPTION|=2; /(1:8)*125=1000us4.OPTION|=3;/(1:16)*125=2000us5.OPTION|=4;/(1:32)*156=4992us=5ms6.OPTION|=6;/(1:128)*78=9984=10ms* */TM0初始化寄存器變量void tm0init(void)BSET(T0IE);#ifTM0INT=1

25、BSET(GIE);#endif#ifTM0INT=2BCLR(GIE);BSET(T0IF);#endifOPTION=(TM0CON|TM0MD|TM0CHL);TMR0=TM0VAL;/*#ifTM0INT=1/TM0中斷處理程序void interrupt intm0(void)if(T0IF)BCLR(T0IF);TMR0=TM0VAL;sys=1;elsesys=0;#endif/-#ifTM0INT=2/TMR0 查詢處理方式void tm0find(uchartm0val)BCLR(T0IF);TMR0=tm0val;while(!T0IF);sys=1;#endif/*/TM

26、R1 定時(shí)/時(shí)數(shù)器模塊pictm1.c/*TM1_MODE=1TM1為定時(shí)方式TM1_MODE=2TM1為計(jì)數(shù)方式* */#defineTM1_MODE1/*TM1SYNC=0TM1同步工作方式TM1SYNC=4TM1異步工作方式* */#defineTM1SYNC0/*TM1INT=1TM1 中斷處理方式void interrupt intm1(void)/不用調(diào)用TM1INT=2TMR1 查詢處理方式void tm1find(uinttm1val)/須在其它程序中調(diào)用* */#defineTM1INT1/* */TMR1 初始化voidtm1init(void)/*TM1 預(yù)分頻器分頻比率

27、T1CKPS=0X001:1TM=(TMR1H:TMR1L)T1CKPS=0X101:2TM=(TMR1H:TMR1L)*2T1CKPS=0X201:4TM=(TMR1H:TMR1L)*4T1CKPS=0X301:8TM=(TMR1H:TMR1L)*8*/#defineT1CKPS0X10/TMR1 16位寄存器#defineTM1MAX500#defineTM1VALHHIGH(65536-TM1MAX)#defineTM1VALLLOW(65536-TM1MAX)/*/TMR1 初始化voidtm1init(void)BCLR(GIE);TMR1H=TM1VALH;TMR1L=TM1VAL

28、L;BSET(TMR1IE);T1CON=(T1CKPS|TM1SYNC);BSET(T1OSCEN);BSET(TMR1ON);BSET(GIE);#ifTM1INT=1BSET(PEIE);BCLR(TMR1IF);#endif#ifTM1INT=2BCLR(PEIE);BSET(TMR1IF);#endif/* */TM0中斷處理程序#ifTM1INT=1void interrupt intm1(void)if(TESTB(PIR1,0)BCLR(GIE);TMR1H=TM1VALH;TMR1L=TM1VALL;T1CON=(T1CKPS|TM1SYNC);BSET(T1OSCEN);B

29、SET(TMR1ON);BCLR(TMR1IF);BSET(GIE);/BSET(PEIE);sys=1;elsesys=0;#endif/- */TMR0 查詢處理方式#ifTM1INT=2void tm1find(uinttm1val)/if(TMR1IF)/BCLR(GIE);BCLR(TMR1IF);TMR1H=HIGH(tm1val);TMR1L=LOW(tm1val);T1CON=(T1CKPS|TM1SYNC);BSET(T1OSCEN);BSET(TMR1ON);while(!TMR1IF);BSET(GIE);sys=1;/#endif/*void tm1find(void)

30、uchartm1tmp;/有中斷溢出if(TESTB(PIR1,0)BCLR(GIE);TMR1H=TM1VALH;TMR1L=TM1VALL;T1CON=(T1CKPS|TM1SYNC);BSET(T1OSCEN);BSET(TMR1ON);BCLR(TMR1IF);BSET(GIE);sys=1;else/計(jì)數(shù)器工作方式/沒有中斷溢出,讀取計(jì)數(shù)值#ifTM1_MODE=2BCLR(GIE);dw.ch.chdh=TMR1H;dw.ch.chdl=TMR1L;tm1tmp=TMR1H;if(tm1tmp=dw.ch.chdh)/讀取2次相等,重新設(shè)置新值tm1tmp=TMR1L;if(tm1

31、tmp=dw.ch.chdl)TMR1H=TM1VALH;TMR1L=TM1VALL;T1CON=(T1CKPS|TM1SYNC);BSET(T1OSCEN);BSET(TMR1ON);BCLR(TMR1IF);BSET(GIE);sys=1;else/讀取2次不相等,重新再讀一次dw.ch.chdh=TMR1H;dw.ch.chdl=TMR1L;TMR1H=TM1VALH;TMR1L=TM1VALL;T1CON=(T1CKPS|TM1SYNC);BSET(T1OSCEN);BSET(TMR1ON);BCLR(TMR1IF);BSET(GIE);sys=1;#endif/-#ifTM1_MOD

32、E=1sys=0;#endif#endif/* */TMR2 定時(shí)/時(shí)數(shù)器模塊pictm2.c/*TM2INT=1TM2 中斷處理方式void interrupt intm2(void)/不用調(diào)用TM2INT=2TMR2 查詢處理方式void tm2find(void)/須在其它程序中調(diào)用* */#defineTM2INT1/* */TMR2 初始化voidtm2init(void)/*TM2 預(yù)分頻器分頻比率 N1T2CKPS=01:1TM=TMR2T2CKPS=11:4TM=TMR2*4T2CKPS=21:16TM=TMR2*16T2CKPS=31:16TM=TMR2*16*TM2 預(yù)分頻

33、器分頻比率 N2T2OUTPS=0X01:1TM=TMR2*N1*1T2OUTPS=0X101:2TM=TMR2*N1*2T2OUTPS=0X201:3TM=TMR2*N1*3T2OUTPS=0X301:4TM=TMR2*N1*4 .T2OUTPS=0XF01:16TM=TMR2*N1*16* */#defineT2CKPS2#defineT2OUTPS0X20/*#defineTMR2VAL200#defineTPR2VAL200/*voidtm2init(void)BCLR(GIE);TMR2=TMR2VAL;PR2=TPR2VAL;T2CON=(T2OUTPS|T2CKPS);BSET(

34、TMR2IE);BCLR(TMR2IF);BSET(TMR2ON);#ifTM2INT=1BSET(GIE);BSET(PEIE);#endif/*/TM2 中斷處理方式#ifTM2INT=1void interrupt intm2(void)if(TESTB(PIR1,1)BCLR(GIE);TMR2=TMR2VAL;BCLR(TMR2IF);BSET(GIE);if(RC7)RC7=0;elseRC7=1;sys=1;elsesys=0;#endif/*#ifTM2INT=2uchartm2_val;/TMR2 查詢處理方式void tm2find(uchartm2val)BCLR(TMR2IF);TMR0=tm2val;while(!TMR2IF);sys=1;#endif/*void tm2find(void)if(TESTB(PIR1,1)TMR2=TMR2VAL;BCLR(TMR2IF);s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論