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++;