
例:sfr P1 = 0x90; //按位定义 SFR 中的存储器名。例:sbit Add_Key = P3 ^ 1; //定义一个位(位的值只能是 0 或 1)例:bit LED; //用代替名代替原名。c语言颜色函数例:#define LED P1 / #define TA 0x25 //键盘所连接的 I/O 接口组定义 //扬声器连接定义 //ds18B20 //模式位,为 0 输入指令,为 1 输入数据 //读写位,为 0 读,为 1 写 //使能位 //数据总线 //定义一个 0~255 的整数变量。 //定义一个 0~65535 的整数变量。 (例:data unsigned char a;) (例:bdata unsigned char a;) (例:idata unsigned char a;) (例:pdata unsigned char a;) (例:xdata unsigned char a;) (例:code unsigned char a;)2.毫秒级 CPU 延时函数/****************************************************************************** 函数名:毫秒级 CPU 延时函数 调 用:DELAY_MS (?); 参 数:1~65535(参数不可为 0) 返回值:无 结 果:占用 CPU 方式延时与参数数值相同的毫秒时间 备 注:应用于 1T 单片机时 i<600,应用于 12T 单片机时 i<125(在此预为 1T 单片机数值) /*****************************************************************************/ void DELAY_MS ( unsigned int a ) { unsigned int i; while ( --a != 0) { for(i = 0; i < 600; i++); } } /*****************************************************************************/ ----------------------------------------------------------------------------M1 M0 方式 说明 0 0 0 13 位 T/C,由 TL 低 5 位和 TH 的 8 位组成 13 位计数器 0 1 1 16 位 T/C,TL 和 TH 共 16 位计数器 1 0 2 8 位 T/C,TL 用于计数,当 TL 溢出时将 TH 中的值自动写入 TL 1 1 3 两组 8 位 T/C -----------------------------------------------------------------------------3.定时/计数器初始化函数/****************************************************************************** 函数名:定时/计数器初始化函数 调 用:T_C_init(); 参 数:无 返回值:无 结 果:设置 SFR 中 T/C1 和(或)T/C0 相关参数 备 注:本函数控制 T/C1 和 T/C0,不需要使用的部分可用//屏蔽 /*****************************************************************************/ void T_C_init (void) { TMOD = 0x11; //高 4 位控制 T/C1 [ GATE,C/T,M1,M0,GATE,C/T,M1,M0 ] EA = 1; //中断总开关 TH1 = 0xFF; TL1 = 0xFF; ET1 = 1; TR1 = 1; //TH0 = 0x3C; //TL0 = 0xB0; //ET0 = 1; //TR0 = 1; //16 位计数寄存器 T1 高 8 位(写入初值) //16 位计数寄存器 T1 低 8 位 //T/C1 中断开关 //T/C1 启动开关 //16 位计数寄存器 T0 高 8 位 //16 位计数寄存器 T0 低 8 位(0x3CB0 = 50mS 延时) //T/C0 中断开关 //T/C0 启动开关} /*****************************************************************************/4.定时/计数器 1 中断处理函数/****************************************************************************** 函数名:定时/计数器 1 中断处理函数 调 用:[T/C1 溢出后中断处理] 参 数:无 返回值:无 结 果:重新写入 16 位计数寄存器初始值,处理用户程序 备 注:必须允许中断并启动 T/C 本函数方可有效,重新写入初值需和 T_C_init 函数一致 /*****************************************************************************/ void T_C1 (void) interrupt 3 using 3 //切换寄存器组到 3 { TH1 = 0x3C; //16 位计数寄存器 T1 高 8 位(重新写入初值) TL1 = 0xB0; //16 位计数寄存器 T1 低 8 位(0x3CB0 = 50mS 延时) //函数内容 } /*****************************************************************************/5.定时/计数器 0 中断处理函数/****************************************************************************** 函数名:定时/计数器 0 中断处理函数 调 用:[T/C0 溢出后中断处理] 参 数:无 返回值:无 结 果:重新写入 16 位计数寄存器初始值,处理用户程序 备 注:必须允许中断并启动 T/C 本函数方可有效,重新写入初值需和 T_C_init 函数一致 /*****************************************************************************/ void T_C0 (void) interrupt 1 using 1 //切换寄存器组到 1 { TH0 = 0x3C; //16 位计数寄存器 T0 高 8 位(重新写入初值) TL0 = 0xB0; //16 位计数寄存器 T0 低 8 位(0x3CB0 = 50mS 延时) //函数内容 } /*****************************************************************************/6.PWM 初始化函数/****************************************************************************** 函数名:PWM 初始化函数 调 用:PWM_init(); 参 数:无 返回值:无 结 果:将 PCA 初始化为 PWM 模式,初始占空比为 0 备 注:需要更多路 PWM 输出直接插入 CCAPnH 和 CCAPnL 即可 /*****************************************************************************/ void PWM_init (void) { CMOD=0x02; //设置 PCA 定时器 CL=0x00; CH=0x00; CCAPM0=0x42; //PWM0 设置 PCA 工作方式为 PWM 方式(0100 0010) CCAP0L=0x00; //设置 PWM0 初始值与 CCAP0H 相同 CCAP0H=0x00; // PWM0 初始时为 0 //CCAPM1=0x42; //CCAP1L=0x00; //CCAP1H=0x00; //CCAPM2=0x42; //CCAP2L=0x00; //CCAP2H=0x00; //CCAPM3=0x42; //CCAP3L=0x00; //CCAP3H=0x00; CR=1; //PWM1 设置 PCA 工作方式为 PWM 方式(使用时删除//) //设置 PWM1 初始值与 CCAP0H 相同 // PWM1 初始时为 0 //PWM2 设置 PCA 工作方式为 PWM 方式 //设置 PWM2 初始值与 CCAP0H 相同 // PWM2 初始时为 0 //PWM3 设置 PCA 工作方式为 PWM 方式 //设置 PWM3 初始值与 CCAP0H 相同 // PWM3 初始时为 0 //启动 PCA 定时器} /*****************************************************************************/7.PWM0 占空比设置函数/****************************************************************************** 函数名:PWM0 占空比设置函数 调 用:PWM0_set(); 参 数:0x00~0xFF(亦可用 0~255) 返回值:无 结 果:设置 PWM 模式占空比,为 0 时全部高电平,为 1 时全部低电平 备 注:如果需要 PWM1 的设置函数,只要把 CCAP0L 和 CCAP0H 中的 0 改为 1 即可 /*****************************************************************************/ void PWM0_set (unsigned char a) { CCAP0L= a; //设置值直接写入 CCAP0L CCAP0H= a; //设置值直接写入 CCAP0H } /*****************************************************************************/8.UART 串口初始化函数/****************************************************************************** 函数名:UART 串口初始化函数 调 用:UART_init(); 参 数:无 返回值:无 结 果:启动 UART 串口接收中断,允许串口接收,启动 T/C1 产生波特率(占用) 备 注:振荡晶体为 12MHz,PC 串口端设置 [ 4800,8,无,1,无 ] /*****************************************************************************/ void UART_init (void) { EA = 1; //允许总中断(如不使用中断,可用//屏蔽) ES = 1; //允许 UART 串口的中断 TMOD = 0x20; SCON = 0x50; TH1 = 0xF3; TL1 = 0xF3; PCON = 0x80; TR1 = 1; //定时器 T/C1 工作方式 2 //串口工作方式 1,允许串口接收(SCON = 0x40 时禁止串口接收) //定时器初值高 8 位设置 //定时器初值低 8 位设置 //波特率倍频(屏蔽本句波特率为 2400) //定时器启动} /*****************************************************************************/9.UART 串口接收中断处理函数/****************************************************************************** 函数名:UART 串口接收中断处理函数 调 用:[SBUF 收到数据后中断处理] 参 数:无 返回值:无 结 果:UART 串口接收到数据时产生中断,用户对数据进行处理(并发送回去) 备 注:过长的处理程序会影响后面数据的接收 /*****************************************************************************/ void UART_R (void) interrupt 4 using 1 //切换寄存器组到 1 { unsigned char UART_data; //定义串口接收数据变量 RI = 0; //令接收中断标志位为 0(软件清零) UART_data = SBUF; //将接收到的数据送入变量 UART_data //用户函数内容(用户可使用 UART_data 做数据处理) //SBUF = UART_data; //while(TI == 0); //TI = 0; //将接收的数据发送回去(删除//即生效) //检查发送中断标志位 //令发送中断标志位为 0(软件清零)} /*****************************************************************************/10.UART 串口发送函数/****************************************************************************** 函数名:UART 串口发送函数 调 用:UART_T (?); 参 数:需要 UART 串口发送的数据(8 位/1 字节) 返回值:无 结 果:将参数中的数据发送给 UART 串口,确认发送完成后退出 备 注: /*****************************************************************************/ void UART_T (unsigned char UART_data) //定义串口发送数据变量 { SBUF = UART_data; //将接收的数据发送回去 while(TI == 0); //检查发送中断标志位 TI = 0; //令发送中断标志位为 0(软件清零) } /*****************************************************************************/11.UART 串口发送字符串函数/****************************************************************************** 函数名:UART 串口发送字符串函数 调 用:UART_TC (?); 参 数:需要 UART 串口发送的数据(8 位/1 字节) 返回值:无 结 果:向串口发送一个字符串,长度不限。c语言颜色函数
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-89445-2.html
等着你们的舞台回归秀
我词穷了T_T
中国在二十年內都还没这能力