大家好
我的功放进程贴开始了,我会记录我的每一步动向,谢谢大家的分享。
开始我的程序设计,一点一滴记录,欢迎大家指正。
/************* 功能说明 **************
本文件为STC15xxx系列的端口初始化程序,用户几乎可以不修改这个程序.
******************************************/
#include "GPIO.h"
//========================================================================
// 函数: u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx)
// 描述: 初始化IO口.
// 参数: GPIOx: 结构参数,请参考timer.h里的定义.
// 返回: 成功返回0, 空操作返回1,错误返回2.
// 版本: V1.0, 2012-10-22
//========================================================================
u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx)
{
if(GPIO > GPIO_P5) return 1; //空操作
if(GPIOx->Mode > GPIO_OUT_PP) return 2; //错误
if(GPIO == GPIO_P0)
{
if(GPIOx->Mode == GPIO_PullUp) P0M1 &= ~GPIOx->Pin, P0M0 &= ~GPIOx->Pin; //上拉准双向口
if(GPIOx->Mode == GPIO_HighZ) P0M1 |= GPIOx->Pin, P0M0 &= ~GPIOx->Pin; //浮空输入
if(GPIOx->Mode == GPIO_OUT_OD) P0M1 |= GPIOx->Pin, P0M0 |= GPIOx->Pin; //开漏输出
if(GPIOx->Mode == GPIO_OUT_PP) P0M1 &= ~GPIOx->Pin, P0M0 |= GPIOx->Pin; //推挽输出
}
if(GPIO == GPIO_P1)
{
if(GPIOx->Mode == GPIO_PullUp) P1M1 &= ~GPIOx->Pin, P1M0 &= ~GPIOx->Pin; //上拉准双向口
if(GPIOx->Mode == GPIO_HighZ) P1M1 |= GPIOx->Pin, P1M0 &= ~GPIOx->Pin; //浮空输入
if(GPIOx->Mode == GPIO_OUT_OD) P1M1 |= GPIOx->Pin, P1M0 |= GPIOx->Pin; //开漏输出
if(GPIOx->Mode == GPIO_OUT_PP) P1M1 &= ~GPIOx->Pin, P1M0 |= GPIOx->Pin; //推挽输出
}
if(GPIO == GPIO_P2)
{
if(GPIOx->Mode == GPIO_PullUp) P2M1 &= ~GPIOx->Pin, P2M0 &= ~GPIOx->Pin; //上拉准双向口
if(GPIOx->Mode == GPIO_HighZ) P2M1 |= GPIOx->Pin, P2M0 &= ~GPIOx->Pin; //浮空输入
if(GPIOx->Mode == GPIO_OUT_OD) P2M1 |= GPIOx->Pin, P2M0 |= GPIOx->Pin; //开漏输出
if(GPIOx->Mode == GPIO_OUT_PP) P2M1 &= ~GPIOx->Pin, P2M0 |= GPIOx->Pin; //推挽输出
}
if(GPIO == GPIO_P3)
{
if(GPIOx->Mode == GPIO_PullUp) P3M1 &= ~GPIOx->Pin, P3M0 &= ~GPIOx->Pin; //上拉准双向口
if(GPIOx->Mode == GPIO_HighZ) P3M1 |= GPIOx->Pin, P3M0 &= ~GPIOx->Pin; //浮空输入
if(GPIOx->Mode == GPIO_OUT_OD) P3M1 |= GPIOx->Pin, P3M0 |= GPIOx->Pin; //开漏输出
if(GPIOx->Mode == GPIO_OUT_PP) P3M1 &= ~GPIOx->Pin, P3M0 |= GPIOx->Pin; //推挽输出
}
if(GPIO == GPIO_P4)
{
if(GPIOx->Mode == GPIO_PullUp) P4M1 &= ~GPIOx->Pin, P4M0 &= ~GPIOx->Pin; //上拉准双向口
if(GPIOx->Mode == GPIO_HighZ) P4M1 |= GPIOx->Pin, P4M0 &= ~GPIOx->Pin; //浮空输入
if(GPIOx->Mode == GPIO_OUT_OD) P4M1 |= GPIOx->Pin, P4M0 |= GPIOx->Pin; //开漏输出
if(GPIOx->Mode == GPIO_OUT_PP) P4M1 &= ~GPIOx->Pin, P4M0 |= GPIOx->Pin; //推挽输出
}
if(GPIO == GPIO_P5)
{
if(GPIOx->Mode == GPIO_PullUp) P5M1 &= ~GPIOx->Pin, P5M0 &= ~GPIOx->Pin; //上拉准双向口
if(GPIOx->Mode == GPIO_HighZ) P5M1 |= GPIOx->Pin, P5M0 &= ~GPIOx->Pin; //浮空输入
if(GPIOx->Mode == GPIO_OUT_OD) P5M1 |= GPIOx->Pin, P5M0 |= GPIOx->Pin; //开漏输出
if(GPIOx->Mode == GPIO_OUT_PP) P5M1 &= ~GPIOx->Pin, P5M0 |= GPIOx->Pin; //推挽输出
}
return 0; //成功
时钟控制
/************* 功能说明 **************
本文件为STC15xxx系列的定时器初始化和中断程序,用户可以在这个文件中修改自己需要的中断程序.
******************************************/
#include "timer.h"
/********************* Timer0中断函数************************/
//void timer0_int (void) interrupt TIMER0_VECTOR
//{
//}
/********************* Timer1中断函数************************/
void timer1_int (void) interrupt TIMER1_VECTOR
{
}
/********************* Timer2中断函数************************/
void timer2_int (void) interrupt TIMER2_VECTOR
{
P10 = ~P10;
}
//========================================================================
// 函数: u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)
// 描述: 定时器初始化程序.
// 参数: TIMx: 结构参数,请参考timer.h里的定义.
// 返回: 成功返回0, 空操作返回1,错误返回2.
// 版本: V1.0, 2012-10-22
//========================================================================
u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)
{
if(TIM > Timer2) return 1; //空操作
if(TIM == Timer0)
{
TR0 = 0; //停止计数
if(TIMx->TIM_Interrupt == ENABLE) ET0 = 1; //允许中断
else ET0 = 0; //禁止中断
if(TIMx->TIM_Polity == PolityHigh) PT0 = 1; //高优先级中断
else PT0 = 0; //低优先级中断
if(TIMx->TIM_Mode > TIM_16BitAutoReloadNoMask) return 2; //错误
TMOD = (TMOD & ~0x03) | TIMx->TIM_Mode; //工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 16位自动重装, 不可屏蔽中断
if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) AUXR &= ~0x80; //12T
if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) AUXR |= 0x80; //1T
if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) TMOD |= 0x04; //对外计数或分频
else TMOD &= ~0x04; //定时
if(TIMx->TIM_ClkOut == ENABLE) INT_CLKO |= 0x01; //输出时钟
else INT_CLKO &= ~0x01; //不输出时钟
TH0 = (u8)(TIMx->TIM_Value >> 8);
TL0 = (u8)TIMx->TIM_Value;
if(TIMx->TIM_Run == ENABLE) TR0 = 1; //开始运行
return 0; //成功
}
if(TIM == Timer1)
{
TR1 = 0; //停止计数
if(TIMx->TIM_Interrupt == ENABLE) ET1 = 1; //允许中断
else ET1 = 0; //禁止中断
if(TIMx->TIM_Polity == PolityHigh) PT1 = 1; //高优先级中断
else PT1 = 0; //低优先级中断
if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; //错误
TMOD = (TMOD & ~0x30) | TIMx->TIM_Mode; //工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装
if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) AUXR &= ~0x40; //12T
if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) AUXR |= 0x40; //1T
if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) TMOD |= 0x40; //对外计数或分频
else TMOD &= ~0x40; //定时
if(TIMx->TIM_ClkOut == ENABLE) INT_CLKO |= 0x02; //输出时钟
else INT_CLKO &= ~0x02; //不输出时钟
TH1 = (u8)(TIMx->TIM_Value >> 8);
TL1 = (u8)TIMx->TIM_Value;
if(TIMx->TIM_Run == ENABLE) TR1 = 1; //开始运行
return 0; //成功
}
if(TIM == Timer2) //Timer2,固定为16位自动重装, 中断无优先级
{
AUXR &= ~(1<<4); //停止计数
if(TIMx->TIM_Interrupt == ENABLE) IE2 |= (1<<2); //允许中断
else IE2 &= ~(1<<2); //禁止中断
if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2;
if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) AUXR &= ~(1<<2); //12T
if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) AUXR |= (1<<2); //1T
if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) AUXR |= (1<<3); //对外计数或分频
else AUXR &= ~(1<<3); //定时
if(TIMx->TIM_ClkOut == ENABLE) INT_CLKO |= 0x04; //输出时钟
else INT_CLKO &= ~0x04; //不输出时钟
TH2 = (u8)(TIMx->TIM_Value >> 8);
TL2 = (u8)TIMx->TIM_Value;
if(TIMx->TIM_Run == ENABLE) AUXR |= (1<<4); //开始运行
return 0; //成功
}
return 2; //错误
}
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |