zoukankan      html  css  js  c++  java
  • 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.2、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);
  • 相关阅读:
    路飞学城-Python爬虫集训-第二章
    路飞学城-Python爬虫集训-第一章
    pymysql 使用
    Mysql 用户管理和权限设置
    spring data jpa
    thymeleaf学习
    Spring Boot技术栈博客笔记(1)
    SpringBoot学习(2)
    使用idea引入注解@SpringBootApplication报错Cannot resolve symbol 'SpringBootApplication'
    SpringBoot学习(1)
  • 原文地址:https://www.cnblogs.com/zkp2010/p/5510766.html
Copyright © 2011-2022 走看看