c8051f320學習,單片機不外乎時鐘、IO、串口、USB等外設用法

 
時鐘
IO(輸入、輸出,如何配置)
  IO
 
數字和模擬資源能夠經過25個I/O 引腳(C805 1F3 2 0 ),每一個端口引腳均可以被定義爲 1  通用I/O(GPIO)或 0 模擬輸入
全部端口I/O 都耐5V電壓
端口I/O 單元能夠被配置爲 漏極開路或推輓方式,口輸出方式寄存器PnMDOUT 中設置,n =  0,1, 2, 3
P1MDOUT |= 0x0F;//0000  1111     置P1的0-3口爲1即推輓輸出方式
P2MDOUT |= 0x0C;//0000 1100 對應 P2.二、P2.3推輓輸出
 
寄存器XBR0 和XBR1 用於爲數字I/O 資源分配物理I/O 引腳
 
PnMDIN 選擇全部端口引腳的輸入方式(模擬或數字)
 
注意:爲使端口P0、P1和P2. 0  ~  P2 .3 工做在標準端口I/O 輸入/輸出方式,交叉開關必
須被使能。當交叉開關被禁止時,端口輸出驅動器被禁止。P2.4 ~  P2.7 和P3.0 老是做爲標準
GPIO 使用
 
 XBR1 |= ( 1<<6 );



USB時鐘
 
C8051F 320/ 1 有一個 可編程內部振盪器、一個外部振盪器驅動電路和一個4 倍時鐘乘法器
能夠經過對OSCICN 和OSCICL 寄存器編程來使能/ 禁止內部振盪器和調節其輸出頻率(如圖
13.1 所示)。系統時鐘(SYSCLK )能夠來自內部振盪器、外部振盪器電路或4 倍時鐘乘法器
二分頻。USB 時鐘(USBCLK )能夠來自內部振盪器、外部振盪器電路或4 倍時鐘乘法器。
表13.3 給出了內部振盪器的電氣特性
 
一旦內部振盪器的頻率被修改,則它不能再被用做USB 時鐘
4 倍時鐘乘法器容許使用12 M Hz 振盪器產生全速USB 通訊所須要的48MHz 時鐘
用CLKMUL寄存器配置4 倍時鐘乘法器。配置和使能4 倍時鐘乘法器的步驟以下:
1 .經過向寄存器CLKMUL寫0x00來複位時鐘乘法器。
2 .用MULSEL位選擇時鐘乘法器的輸入。
3 .用MULEN位使能時鐘乘法器(CLKM UL | = 0x80 )。
4 .延時大於5 µs 。
5 .用MULINIT位初始化時鐘乘法器(CLKMUL |  = 0 x C 0 )。
6 .查詢等待MULRDY => ‘1 ’。
 
//都是同樣的乘法寄存器配置
void Clock_Init( void )
{
     INT8U i;
     if( ( CLKMUL & ( 1<<5 ) ) ) return;//如乘法寄存器鎖定,則返回
     CLKMUL = 0;
     CLKMUL |= ( 1<<7 );//時鐘乘法器使能位
     for( i = 0; i < 250; i ++ );//延遲
     CLKMUL |= 0xC0;//1100 0000 ,初始化時鐘乘法器
     for( i = 0; i < 250; i ++ );
     while( !( CLKMUL & ( 1<<5 ) ) );//時鐘乘法器穩定後,MULRDY的讀出值爲‘1 ’
     CLKSEL = ( 2<<0 );
}

串口
 
void Port_Init (void)
{
   XBR1     = 0x40;                    // Enable crossbar and weak pullups
    XBR0      = 0x01;
     P0MDOUT |= 0x10;                    // Set TX pin to push-pull
}
 
void UART0_Init (void)
{
   SCON0 = 0x10;               // 0x0001 0000      8位UART  無  中止位的邏輯電平被忽略 UART0接收容許
                                    //    SCON0: 8-bit variable bit rate
                                       //        level of STOP bit is ignored
                                       //         RX enabled
                                       //        ninth bits are zeros
                                       //        clear RI0 and TI0 bits
//配置 T1M 、 SCA1:0
   if (SYSCLK/BAUDRATE/2/256 < 1) {
      TH1 = -(SYSCLK/BAUDRATE/2);
      CKCON |=  0x08;                  // T1M = 1; SCA1:0 = xx
   } else if (SYSCLK/BAUDRATE/2/256 < 4) {
      TH1 = -(SYSCLK/BAUDRATE/2/4);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01
      CKCON |=  0x01;
   } else if (SYSCLK/BAUDRATE/2/256 < 12) {
      TH1 = -(SYSCLK/BAUDRATE/2/12);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
   } else if (SYSCLK/BAUDRATE/2/256 < 48) {
      TH1 = -(SYSCLK/BAUDRATE/2/48);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
      CKCON |=  0x02;
   } else {
      while (1);                       // Error.  Unsupported baud rate
   }

   TL1 = TH1;                          // init Timer1
   TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
   TMOD |=  0x20;
   TR1 = 1;                            // START Timer1
   TI0 = 1;                            // Indicate TX0 ready
}

ADC
用配置器來配置:
ADC0CN = 0x02;                      // ADC0 disabled, normal tracking,
                                       // conversion triggered on TMR2 overflow ADC0 用時鐘2來觸發
 
EIE1 |= 0x08;                       // enable ADC0 conversion complete int. 中斷配置
 
 
在ADCMUX設置那裏選P2.4,和GND。 引腳配置
AMX0P = 0x0C;                       // ADC0 positive input = P2.4
   AMX0N = 0x1F;                       // ADC0 negative input = GND
                                       // i.e., single ended mode
 
P2MDIN    = 0xEF;//P2.4設置爲模擬輸入,portinit處
 
還要串口配置和時鐘2

I2C
void SMBus_Init(void); void SMBus_ISR(void);
相關文章
相關標籤/搜索