⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 motorola单片机MCHC908的使用方法以及例程
💻 C
字号:
#include <hidef.h> /* for EnableInterrupts macro */
#include <MC68HC908GZ16.h> /* include peripheral declarations */

 #pragma MESSAGE DISABLE C1106 // WARNING C1106: Non-standard bitfield type 
//自定义的标志位(对位进行操作)
//注意:对位进行取反的操作为  ~MyFlag_0  (不是 !MyFlag_0 )
typedef union {
  unsigned char FlagByte;
  struct {
   unsigned char Flag0    :1;           
   unsigned char Flag1    :1;          
   unsigned char Flag2    :1;          
   unsigned char Flag3    :1;         
   unsigned char Flag4    :1;          
   unsigned char Flag5    :1;          
   unsigned char Flag6    :1;       
   unsigned char Flag7    :1;           
  } Bits;
 } Flag;
Flag MyFlag;
#define MyFlag_0 MyFlag.Bits.Flag0
#define MyFlag_1 MyFlag.Bits.Flag1
#define MyFlag_2 MyFlag.Bits.Flag2
#define MyFlag_3 MyFlag.Bits.Flag3
#define MyFlag_4 MyFlag.Bits.Flag4
#define MyFlag_5 MyFlag.Bits.Flag5
#define MyFlag_6 MyFlag.Bits.Flag6
#define MyFlag_7 MyFlag.Bits.Flag7
#define MyFlag_8 MyFlag.Bits.Flag8

#define FG_PWM1 MyFlag_3
#define FG_PWM2 MyFlag_4
#define Flag_KeyPress MyFlag_2

uint New_T1CH0,Old_T1CH0;  //改变的新的PWM占空比值

ulong temp;
void initial(void){
CONFIG2=0x0f; //Bit 3:Enable CAN, Bit 2:Enable extra divide-by-128 prescaler in timebase module 
               //Bit 0:Internal data bus clock used as clock source for SCI
CONFIG1=0x4b;//LVI enable, COP disable
PCTL=0x00; //turn off the PLL, CGMXCLOCK=(crystal clock)
FG_PWM1=0;
FG_PWM2=0;
}
void Delays(void)
{uint i=10000;
while(i--);
}
 
void T1CH0PWM(void){
//定时器 1 的通道0做PWM输出
//当采用晶振4.9152MHz,则总线频率1228800Hz,如定时器分频系数=1,则产生PWM周期(T1MOD值)/1228.8 (ms),高电平时间(T1CH1值)/1228.8 (ms)
//默认时TMOD为0XFFFF,则PWM周期为53ms
T1SC=0x30; //先停止并复位记时器
T1MOD=0x3332;
T1CH0=0x800; 
//T1SC1=0x5e; //PWM模式,允许中断,比较符合时输出高
T1SC0=0x5a; //PWM模式,允许中断,比较符合时输出低
//T1SC0_CH0IE=0;
T1SC_TOIE=0;//允许溢出中断,
T1SC0_CH0IE=0;
T1SC_TSTOP=0; //开始记数
}
/*******************************************************************
!!!!!!本程序实现非缓冲方式下PWM输出,而且不导致波形失真或者波形丢失!!!!!!
*******************************************************************/
void main(void) {
initial();
EnableInterrupts; 
 // DDRA_DDRA4=1;
 DDRA_DDRA5=1;
  DDRA_DDRA4=1;
 
 PTA_PTA5=0;
  PTA_PTA4=1;
//T1CH0PWM();

/*

New_T1CH0=0x800;
Old_T1CH0=0x800;
while(1)
{
New_T1CH0=New_T1CH0+100;

if(New_T1CH0<Old_T1CH0)
FG_PWM1=1;
else 
FG_PWM2=1;
if(New_T1CH0>=0x3300)
New_T1CH0=0x800;
//for(temp=0;temp<100;temp++)
Delays();
}*/

}


interrupt void T1CH0OutCompare_ISR (void)
{
if(FG_PWM1)
{T1CH0=New_T1CH0;
Old_T1CH0=New_T1CH0;
FG_PWM1=0;}
T1SC0;
T1SC0_CH0F=0;
}

interrupt void T1Overflow_ISR (void)
{//TIM1 Overflow 
if(FG_PWM2)
{T1CH0=New_T1CH0;
Old_T1CH0=New_T1CH0;
FG_PWM2=0;}
T1SC;//清除溢出标志位
T1SC_TOF=0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -