A. ec9s12xs128是什么单片机
1、MC9S12XS128是Freescale公司的16位单片机,由16位中央处理单元(CPU12X)、128KB程序Flash(P-lash)、8KB RAM、8KB数据Flash(D-lash)组成片内存储器
2、Freescale 公司的16位单片机主要分为HC12 、HCS12、HCS12X三个系列。HC12核心是16位高速CPU12核,总线速度8MHZ;HCS12系列单片机以速度更快的CPU12内核为核心,简称S12系列,典型的S12总线速度可以达到25MHZ。HCS12X系列单片机是Freescale 公司于2005年推出的HCS12系列增强型产品,基于S12 CPU内核,可以达到25MHz的HCS12的2-5倍性能。总线频率最高可达40 MHz。S12X系列单片机目前又有几个子系列:MC9S12XA系列、MC9S12XB系列、MC9S12XD系列、MC9S12XE系列、MC9S12XF系列、MC9S12XH系列和MC9S12XS系列。MC9S12XS128就是S12X系列中的一个成员
3、主要功能模块包括:
内部存储器
内部PLL锁相环模块
2个异步串口通讯 SCI
1个串行外设接口 SPI
MSCAN 模块
1个8通道输入/输出比较定时器模块 TIM
周期中断定时器模块 PIT
16通道A/D转换模块 ADC
1个8通道脉冲宽度调制模块
PWM 输入/输出数字I/O口
4、详见参考:http://wenku..com/link?url=KDgQAfL9qbJJXoiyBB-oy4TFd7M-axPBr97ajZCazgiLGURo_
B. xs128单片机中PWM初始化程序怎么写
有联合和独立两种方式,对号入座即可:
void PWM_Init(void)
{
//pwm0.pwm1
PWMCTL_CON01=1; //0和1联合成16位PWM;
PWMCAE_CAE1=0;//选择输出模式为左对齐输出模式
PWMCNT01 = 0;//计数器清零;
PWMPOL_PPOL1=1;//先输出高电平,计数到DTY时,反转电平
PWMPRCLK = 0X50; //clockA不分频,clockA=busclock=32MHz;CLK B 32分频:1Mhz
PWMSCLA = 0x10; //对clock SA 进行2*PWMSCLA=32分频;pwm clock=clockA/32=1MHz;
PWMCLK_PCLK1 = 1; //选择clock SA做时钟源
PWMPER01 = 20000; //周期20ms; 50Hz;(可以使用的范围:50-200hz)
PWMDTY01 = 1510; //高电平时间为1.5ms;
PWME_PWME1 = 1;
//PWMSCLB=0X05; //clk SB=clk B/(2*pwmsclb):75KHZ
PWMSCLB=0X04; //clk SB=clk B/(2*pwmsclb)=125KHZ
//pwm3;
PWMCNT3 = 0;
PWMCAE_CAE3=0; //选择输出模式为左对齐输出模式
PWMPOL_PPOL3=0;
PWMPER3 =125; //蜂鸣器名叫频率为1KHZ
PWMDTY3 =100; //ty circle=(PWMPER3-PWMDTY3)/PWMPER3=20%
PWMCLK_PCLK3 = 1;
PWME_PWME3 = 0;
//PWM6,IN1驱动电机控制
PWMCNT6 = 0;
PWMCAE_CAE6=0; //选择输出模式为左对齐输出模式
PWMPOL_PPOL6=0;
PWMPER6 =25; //后轮驱动CLOCK大约125K--5.000KHz,75K--3K=clk B/PWMPER2
PWMDTY6 =25; //ty circle=(PWMPER2-PWMDTY2)/PWMPER2=0
PWMCLK_PCLK6 = 1; //1 = Clock SB is the clock source for PWM channel 2.
PWME_PWME6 = 1; //如果禁止,则PWM2输出高电平,意味着MC33886全速运行
//PWM7,IN2驱动电机控制
PWMCNT7 = 0;
PWMCAE_CAE7=0;
PWMPOL_PPOL7=0;
PWMPER7 =25;
PWMDTY7 =25;
PWMCLK_PCLK7 = 1;
PWME_PWME7 = 1;
}
C. 求飞思卡尔单片机mc9s12xs128 超频CW5.0例程
void MCUInit()
{
DisableInterrupts; //禁止总中断
CLKSEL &= 0x7f; //CLKSEL的第7位置0,选择系统时钟源为OSCCLK
PLLCTL &= 0xbf; //禁止PLL , PLLCTL.6(pllon)设为0;先关闭PLL
SYNR = 0x01; //根据需要的时钟频率设置SYNR和REFDV寄存器
REFDV = 0x00;
//PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
PLLCTL |= (1<<6); //打开PLL , PLLCTL.6(pllon)设为1;开PLL
while (( CRGFLG&0x08) == 0x00);//通过判断LOCK位,
//确定PLL是否稳定
CLKSEL |= (1<<7); //时钟频率稳定后,允许锁相环时钟源作为系统时钟源;
//本句 执行后:BusClock=PLLCLK/2 BusClock = 32MHz
}
自己写的,调试过没问题,具体主线你想用多少根据注释自己改
D. XS128单片机中ECT模块和TIM模块的区别
xs128没有ECT模块,而是分成了PIT和TIM两个模块。PIT的作用是产生周期中断,与51单片机的定时器功能一样,只是不需像51那样在中断中要重赋定时器初值。计数是在TIM中实现,xs128只有16位一个脉冲累加器PACA(与IOC7脚相连),而dg128还有PACB,比如你用光电编码器测速,编码器传回一系列脉冲,由PACA记录脉冲数,有一个脉冲就记一个数(这与你设定的触发沿有关)。另外,每个引脚都有一个对应的TCx寄存器,当相应引脚触发时,TIM模块中的自由计数器TCNT中的计数值就存到对应的TCx中(读回TCx),再触发一次TCNT再存入TCx(再读回),两次相减就为两次触发的间隔时间。
E. 单片机设计动态显示时间6:00怎么设置
从左到右的开关控制分别为:秒设置、分设置、时设置、敏拍团进入时间设置(设置时间需要按一下这个再按前面3个按键设置)、闹钟设置(通过前面3个按键设置)、保存设置(设置完成后按下保存并退出)。
图片
时钟可以显示到秒位
数码管用的是共阴,共阳的话加三极管闲麻烦,没加。
数码管a~g接的P0口,没用10K排阻上拉,试了下觉得亮度太低了,就都换成了2K的作为上拉。
图片
有兴趣的可以给加上温度传感器,可以显示温度(我这里面就没加了)
初学单片机没多久,欢迎大佬指导。
材料如下:89C52*1
4位数码管*1+2位数码管*1(当然如桥橘果有六位的也可以直接用,找不到其他数码管了就这么混搭了)
有源蜂鸣器*1(试过无源,但时间计算过于占用资源导致发声不是很完美,大佬可以改一下)
轻触开关*7(1个用于复位,其余六个用于设置) + 自锁开关*1
电池*1 + 5V稳压*1
单片机源码:
#include
#define uint unsigned int
#define uchar unsigned char
sbit WE1=P2^5;
sbit WE2=P2^4;
sbit WE3=P2^3;
sbit WE4=P2^2;
sbit WE5=P2^1;
sbit WE6=P2^0;
sbit K1=P1^0; //设置小时位
sbit K2=P1^1; //设置分位
sbit K3=P1^2; //设置秒位
sbit K4=P1^3; //进入时间设置
sbit K5=P1^4; //进入闹钟设置
sbit K6=P1^5; //退出设置
sbit BZ=P1^6; //蜂鸣器接口
uchar code table[]={
0XC0,0XF9,0XA4,
0XB0,0X99,0X92,
0X82,0XF8,0X80,
0X90};
uint tt=0,i=0,j=0,T=0,R=0,S;
uint W1=0,W2=0,W3=0,W4=0,W5=0,W6=0; //当前时间位,依次接P0口即可,即W1=P0^0,W2=P0^2.....以此类推
uint WD1=0,WD2=0,WD3=0,WD4=0,WD5=0,WD6=0; //闹钟时间位,用于储存设置的闹钟时间,不接
void delay(uint); //软延时
//void delay1(uint);
void js(void); //时钟进位定义
void key(void); //按键
void XS(uint,uint,uint,uint,uint,uint); //动态扫描数码管显示
void xhsz(uint,uint,uint,uint,uint,uint,uint); //时钟位设置函数
void main()
{
P1=0X0;
TMOD=0X01;
TH0=(65536-49971)/256;
TL0=(65536-49971)%256;
//TH1=(65536-65535)/256; //定时器二(贺巧未启用)
//TL1=(65536-65535)%256;
EA=1;
ET0=1;
//ET1=1;
TR0=1;
//TR1=1;
while(1)
{
key();
XS(W1,W2,W3,W4,W5,W6);
js();
if(WD1==W1&&WD2==W2&&WD3==W3&&WD4==W4&&WD5==W5&&WD6==W6) //闹钟定时判断
T=1;
}
}
void xhsz(uint Q1,uint Q2,uint Q3,uint Q4,uint Q5,uint Q6,uint Y) //输入需要设置的位Q1~Q6,末尾输入1则将值赋给W1~W6,输入0则赋给WD1~WD6
{
while(1)
{
if(Y==1)
{
W1=Q1;W2=Q2;W3=Q3;W4=Q4;W5=Q5;W6=Q6;
}
if(Y==0)
{
WD1=Q1;WD2=Q2;WD3=Q3;WD4=Q4;WD5=Q5;WD6=Q6;
}
if(K1==1)//秒调
{
delay(10);
if(K1==1)
{
while(K1==1)
XS(Q1,Q2,Q3,Q4,Q5,Q6);
Q1++;