单片机常用的宏及硬件端口命名.doc_第1页
单片机常用的宏及硬件端口命名.doc_第2页
单片机常用的宏及硬件端口命名.doc_第3页
单片机常用的宏及硬件端口命名.doc_第4页
单片机常用的宏及硬件端口命名.doc_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

此文档收集于网络,如有侵权,请联系网站删除/常用的宏及硬件端口命名config.c/*#ifndef_CONF_#define_CONF_/*MCU=1Keil C51 8051MCUMCU=2MPLAB IDEPICMCU* */#defineMCU1/*#ifMCU=1#include#definePAP0#definePBP1#definePCP2#definePDP3#defineTABROMcode#endif/-#ifMCU=2#include#defineTABROMconst/*简化端口符号名*/#definePAPORTA#definePBPORTB#definePCPORTC#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;/系统标志位/* typedef unsigned charuchar;typedefunsigned charUchar;typedefunsigned charUCHAR;typedefunsigned charbyte;typedefunsigned charBYTE;typedefunsigned charbyt;typedefunsigned charBYT;typedefsigned charsbyte;typedefsigned charSBYTE;/-typedefunsigned intuint;typedefunsigned intUint;typedefunsigned intUINT;typedefunsigned intwbyte;typedefunsigned intWBYTE;typedefunsigned intWbyte;typedefunsigned intwbyt;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#defineBCLR(BIT) BIT=0#defineTESTB(b,offset)(1&(b)(offset)#defineSETB(b,offset)(b)|=(1(offset)#defineCLRB(b,offset)(b)&=(11)|n)#defineLEFTB(b,n)(b)(b)?(a):(b)#defineMIN(a,b)(a)(b)?(a):(b)#defineTRUE1#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低电平触发INT0_HLOW=1外部中断0负边沿触发* */#defineINT0_HLOW1/*EXT0INT=1外部中断0 中断处理方式void ext0int(void)interrupt 0 /不用调用EXT1INT=2外部中断0 查询处理方式void ext0find(void)/须在其它程序中调用* */#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();加入其它功能程序 #endif/-#if EXT0INT=2void ext0find(void)while(IE0=0);/ fun();加入其它功能程序#endif/*/ 8051外部中断1 模块/*INT1_HLOW=0x00外部中断1低电平触发INT1_HLOW=0x04外部中断1负边沿触发* */#defineINT1_HLOW0X04/*EXT1INT=1外部中断1 中断处理方式void ext1int(void)interrupt 2 /不用调用EXT1INT=2外部中断1 查询处理方式void ext1find(void)/须在其它程序中调用* */#defineEXT1INT2/* */TM0 初始化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 定时/时数器模块/*TM0_CT=0X00TM0为定时方式TM0_CT=0X04TM0为计数方式* */#defineTM0_CT0/*TM0_MODE=0TM0工作于13位模式最大值8192TM0_MODE=1TM0工作于16位模式最大值65536TM0_MODE=2TM0工作于8位自动加载模式最大值256TM0_MODE=3TM0工作于分立定时器模式最大值256* */#defineTM0_MODE0/*TM0INT=1TM1 中断处理方式void intm0(void)interrupt 1 /不用调用TM0INT=2TMR1 查询处理方式void tm0find(void)/须在其它程序中调用* */#defineTM0INT1/* */TM0 初始化voidtm0init(void)/* */#define 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_VALH(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(TF0=0);BCLR(TF0);TH0=TM0_VALH;TL0=TM0_VALL; / fun();加入其它功能程序BSET(sys); #endif /*/TMR1 定时/时数器模块/*TM1_CT=0X00TM1为定时方式TM1_CT=0X40TM1为计数方式* */#defineTM1_CT0x00/*TM1_MODE=0X00TM1工作于13位模式最大值8192TM1_MODE=0X10TM1工作于16位模式最大值65536TM1_MODE=0X20TM1工作于8位自动加载模式最大值256TM1_MODE=0X30TM1工作于分立定时器模式最大值256* */#defineTM1_MODE0x10/*TM1INT=1TM1 中断处理方式void intm1(void)interrupt 3 /不用调用TM1INT=2TMR1 查询处理方式void tm1find(void)/须在其它程序中调用* */#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_VALHHIGH(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);TH1=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串行通信比特率设定UART_MODE=0X00模式0 固定比特率OSC/12的移位式数据传送UART_MODE=0X80模式1 可变比特率的串行数据传送由TMR1或TMR2控制UART_MODE=0X40模式2 固定比特率OSC/32或OSC/64的移位式数据传送UART)MODE=0XC0模式3 可变比特率的串行数据传送由TMR1或TMR2控制* */#defineUART_MODE0X80/* TM1波特率产生方式 模式2 f=Fosc/12/32(MODE=0) f=Fosc/12/16(MODE=1) TH1十进制十六进制SMOD=0SMOD=1 -3FD960019200 -6FA48009600 -12F424004800 -24E812002400*/*多机通信启用UART_TEL=0X00单机通信UART_TEL=0X20多机通信* */#defineUART_TEL0X00/*UART_REN=0X00单机发送UART_REN=0X10双向通信* */#defineUART_REN0X10/*UARTINT=1UART 中断处理方式void uartint(void)interrupt 4 /不用调用UARTINT=2外部中断1 查询处理方式void uartfind(void)/须在其它程序中调用* */#defineUARTINT2/* */TM0 初始化voiduartinit(void)/* */uchar dat;/接收数据保存位置/*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=0;/return(dat);/fun(); 加入其它功能程序 #endif/*/ TMR0 定时/时数器模块pictm0.c/*TM0_MODE=1RMR0为定时器工作方式TM0_MODE=2RMR0为计数器工作方式TM0_CHL=1计数上升沿触发TM0_CHL=2计数下降沿触发TM0_MODE=3RMR0为WDT看门狗工作方式* */#defineTM0_MODE1#defineTM0CHL0X00#ifTM0_MODE=1/定时器#defineTM0MD0X00#endif#ifTM0_MODE=2/计数器#defineTM0MD0X20/*#ifTM0_CHL=1#defineTM0CHL0X00/计数上升沿触发#endif#ifTM0_CHL=2#defineTM0CHL0X10/计数下降沿触发#endif* */#endif#ifTM0_MODE=3/WDT看门狗#defineTM0MD0X08#endif/TM0初始化寄存器变量/void tm0init(void)/*TM0INT=1TM0 中断处理方式void interrupt intm0(void)/不用调用TM0INT=2TMR0 查询处理方式void tm0find(uchar tm0val)/须在其它程序中调用* */#define TM0INT1/*预分频器分频比率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=10ms7.OPTION=N;/(1:N)*M* */#defineTM0_VAL2#ifTM0_VAL=1/0.5ms#defineTM0VAL(256-250)#defineTM0CON0#endif#ifTM0_VAL=2/1ms#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/-#defineTM0VAL(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=1BSET(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/*/TMR1 定时/时数器模块pictm1.c/*TM1_MODE=1TM1为定时方式TM1_MODE=2TM1为计数方式* */#defineTM1_MODE1/*TM1SYNC=0TM1同步工作方式TM1SYNC=4TM1异步工作方式* */#defineTM1SYNC0/*TM1INT=1TM1 中断处理方式void interrupt intm1(void)/不用调用TM1INT=2TMR1 查询处理方式void tm1find(uinttm1val)/须在其它程序中调用* */#defineTM1INT1/* */TMR1 初始化voidtm1init(void)/*TM1 预分频器分频比率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=TM1VALL;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);BSET(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)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/计数器工作方式/没有中断溢出,读取计数值#ifTM1_MODE=2BCLR(GIE);dw.ch.chdh=TMR1H;dw.ch.chdl=TMR1L;tm1tmp=TMR1H;if(tm1tmp=dw.ch.chdh)/读取2次相等,重新设置新值tm1tmp=TMR1L;if(tm1tmp=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_MODE=1sys=0;#endif#endif/* */TMR2 定时/时数器模块pictm2.c/*TM2INT=1TM2 中断处理方式void interrupt intm2(void)/不用调用TM2INT=2TMR2 查询处理方式void tm2find(void)/须在其它程序中调用* */#defineTM2INT1/* */TMR2 初始化voidtm2init(void)/*TM2 预分频器分频比率 N1T2CKPS=01:1TM=TMR2T2CKPS=11:4TM=TMR2*4T2CKPS=21:16TM=TMR2*16T2CKPS=31:16TM=TMR2*16*TM2 预分频器分频比率 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(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);sys=1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论