久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: atmega16單片機(jī)寄存器配置介紹 這個(gè)程序比查看手冊方便多了 [打印本頁]

作者: taotie    時(shí)間: 2021-12-26 10:35
標(biāo)題: atmega16單片機(jī)寄存器配置介紹 這個(gè)程序比查看手冊方便多了
網(wǎng)上找到的,這個(gè)比查看手冊方便多了。
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
//#include <iom16v.h>
//#include <macros.h>

void initialize()
{
    // DDRx端口方向寄存器,PORTx數(shù)據(jù)寄存器,PINx輸入引腳寄存器
    // DDRxn相應(yīng)位為1,引腳為輸出否則為輸入
    // PORTxn為1時(shí),上拉電阻使能
    DDRA = 0x00;
}

void init_adc()
{
    // ADMUX
    // -----------------------------------------------------------------
    // | REFS1 | REFS0 | ADLAR |  MUX4 |  MUX3 |  MUX2 |  MUX1 |  MUX0 |
    // -----------------------------------------------------------------
    // REFS1 REFS0: 00,使用AREF,內(nèi)部參考電壓關(guān)閉
    //              01,AVCC、AREF引腳外加濾波電容
    //                 10,保留
    //                 11,2.56V片內(nèi)基準(zhǔn)電壓,AREF引腳外加濾波電容
    // ADLAR: ADC轉(zhuǎn)換結(jié)果左對齊
    //  MUX4 ~  MUX0   單端輸入  正差分輸入   負(fù)差分輸入   增益
    // 00000 ~ 00111  ADC0~ADC7
    //   01000                   ADC0         ADC0         10x
    //   01001                   ADC1         ADC0         10x
    //   01010                   ADC0         ADC0        200x                  
    //   01011                   ADC1         ADC0        200x
    //   01100                   ADC2         ADC2         10x
    //   01101                   ADC3         ADC2         10x
    //   01110                   ADC2         ADC2        200x
    //   01111                   ADC3         ADC2        200x
    //   10000                   ADC0         ADC1          1x
    //   10001                   ADC1         ADC1          1x
    //   10010                   ADC2         ADC1          1x
    //   10011                   ADC3         ADC1          1x
    //   10100                   ADC4         ADC1          1x
    //   10101                   ADC5         ADC1          1x
    //   10110                   ADC6         ADC1          1x
    //   10111                   ADC7         ADC1          1x
    //   11000                   ADC0         ADC2          1x
    //   11001                   ADC1         ADC2          1x
    //   11010                   ADC2         ADC2          1x
    //   11011                   ADC3         ADC2          1x
    //   11100                   ADC4         ADC2          1x
    //   11101                   ADC5         ADC2          1x
    //   11110       1.23V(VBG)
    //   11111        0V(GND)                                                                                                                                    
     ADMUX = 0;

    // ADCSRA
    // -----------------------------------------------------------------
    // |  ADEN |  ADSC |  ADFR |  ADIF |  ADIE | ADPS2 | ADPS1 | ADPS0 |
    // -----------------------------------------------------------------
    // ADEN:ADC使能,轉(zhuǎn)換過程中禁止ADC則立即中止轉(zhuǎn)換。
    // ADSC:ADC開始轉(zhuǎn)換。在轉(zhuǎn)換過程中ADSC為1直到轉(zhuǎn)換結(jié)束。
    // ADFR:是否工作在連續(xù)模式,該位寫0,停止連續(xù)轉(zhuǎn)換模式。
    // ADIF:ADC中斷標(biāo)志。中斷服務(wù)硬件清零。
    // ADIE:ADC中斷使能
    // ADSP2 ~ ADSP0:ADC預(yù)分頻選擇  000:2分頻,001到111為2到128分頻
    //               ADC在50~200KHz時(shí)鐘時(shí)能獲得最大精度
    ADCSRA = 0;

    // ADCC & ADCH
    // ADC轉(zhuǎn)換結(jié)果寄存器,差分通道結(jié)果以2的補(bǔ)碼形式表示,ADC數(shù)據(jù)必須讀過
    // ADCH后才可進(jìn)行數(shù)據(jù)更新。對于精度小于8位的左對齊數(shù)據(jù)可只讀ADCH。
    // 數(shù)據(jù)右對齊(ADLAR = 0)
    // ADCH-------------------------------------------------------------
    // |   -   |   -   |   -   |   -   |   -   |   -   |  ADC9 |  ADC8 |
    // -----------------------------------------------------------------
    // ADCL-------------------------------------------------------------
    // |  ADC7 |  ADC6 |  ADC5 |  ADC4 |  ADC3 |  ADC2 |  ADC1 |  ADC0 |
    // -----------------------------------------------------------------
    //
}

void init_timer()
{

    //SFIOR
    // -----------------------------------------------------------------
    // |  TSM  |   -   |   -   |   -   |  ACME |  PUD  |  PSR0 | PSR321|
    // -----------------------------------------------------------------
    // TSM: T/C同步模式。置位時(shí),PSR0和PSR321保持其數(shù)據(jù)直到被更新或TSM被清零
    // PSR0:T/C0預(yù)分頻器復(fù)位,置位時(shí)使預(yù)頻器復(fù)位,直到為0時(shí)表示復(fù)位完成
    // PSR321: T/C3、2、1預(yù)分頻繁器復(fù)位,此位讀總為0
    // ACME: 模擬比較器使能
    // PUD: 所有端口上拉電阻禁止,置1為禁止
    SFIOR = 0;

}
void init_timer0()
{
    //TCCR0 T/C0控制寄存器
    // -----------------------------------------------------------------
    // |  FOC0 | WGM00 | COM01 | COM00 | WGM01 |  CS02 |  CS01 |  CS00 |
    // -----------------------------------------------------------------
    // FOC0:強(qiáng)制輸出比較啟動(dòng)
    // WGM01, WGM00: 工作模式選擇
    //              00:普通模式,01:PWM相位修正,
    //              10:比較匹配時(shí)清除計(jì)數(shù)器模式(CTC模式),11:快速PWM
    // COM01, COM00: 比較匹配時(shí)的輸出模式
    //          WGMxx為普通模式或CTC模式時(shí)
    //              00:OC0未連接,
    //              01:OC0取反,
    //              10:OC0清零,
    //              11:OC0置位
    //          WGMxx為相位修正PWM模式
    //              00:OC0未連接,
    //              01:保留,
    //              10:升序匹配時(shí)清零OC0;降序匹配時(shí)置位OC0,
    //              11:升序匹配時(shí)置位OC0;降序匹配時(shí)清零OC0
    //          WGMxx為快速PWM模式
    //              00:OC0未連接
    //              01:保留
    //              10:匹配時(shí)OC0清零;計(jì)數(shù)到TOP時(shí)OC0置位
    //              11:匹配時(shí)OC0置位;計(jì)數(shù)到TOP時(shí)OC0清零
    // CS02,CS01,CS00:T/C0時(shí)鐘預(yù)分頻選擇
    //              000:無時(shí)鐘,T/C不工作     001:1/1
    //              010:1/8     011:1/32     100:1/64
    //              101:1/128   110:1/256    111:1/1024
    TCCR0 = 0;

    //TCNT0 T/C0計(jì)數(shù)寄存器,8位

    //OCR0 輸出比較寄存器,8位

    //TIMSK T/C中斷屏蔽寄存器
    // -----------------------------------------------------------------
    // | OCIE2 | TOIE2 | TICIE1| OCIE1A| OCIE1B| TOIE1 | OCIE0 | TOIE0 |
    // -----------------------------------------------------------------
    // OCIE2:T/C2輸出比較匹配中斷使能
    // TOIE2:T/C2溢出中斷使能
    // TICIE1:T/C1輸入捕捉中斷使能
    // OCIE1A:T/C1輸出比較A匹配中斷使能
    // OCIE1B:T/C1輸出比較B匹配中斷使能
    // TOIE1:T/C1溢出中斷使能
    // OCIE0:T/C0輸出比較匹配中斷使能
    // TOIE0:T/C0溢出中斷使能
    TIMSK = 0;

    //ETIMSK T/C擴(kuò)展中斷屏蔽寄存器
    // -----------------------------------------------------------------
    // |   -   |   -   | TICIE3| OCIE3A| OCIE3B| TOIE3 | OCIE3C| OCIE1C|
    // -----------------------------------------------------------------
    // TICIE3:T/C3輸入捕捉中斷使能
    // OCIE3A:T/C3輸出比較A匹配中斷使能
    // OCIE3B:T/C3輸出比較B匹配中斷使能
    // TOIE3:T/C3溢出中斷使能
    // OCIE3C:T/C3輸出比較C匹配中斷使能
    // OCIE1C:T/C1輸出比較C匹配中斷使能
//ETIMSK = 0;


    //TIFR T/C中斷標(biāo)志寄存器
    // -----------------------------------------------------------------
    // |  OCF2 |  TOV2 |  ICF1 | OCF1A | OCF1B |  TOV1 |  OCF0 |  TOV0 |
    // -----------------------------------------------------------------
    // OCF2:T/C2輸出比較匹配標(biāo)志
    // TOV2:T/C2溢出標(biāo)志
    // ICF1:T/C1輸入捕捉標(biāo)志位
    // OCF1A:T/C1輸出比較A匹配標(biāo)志位
    // OCF1B:T/C1輸出比較B匹配標(biāo)志位
    // TOV1:T/C1溢出標(biāo)志
    // OCF0:T/C0輸出比較匹配標(biāo)志
    // TOV0:T/C0溢出標(biāo)志


    //ETIFR 擴(kuò)展的T/C中斷標(biāo)志寄存器
    // -----------------------------------------------------------------
    // |   -   |   -   |  ICF3 | OCF3A | OCF3B |  TOV3 | OCF3C | OCF1C |
    // -----------------------------------------------------------------
    // ICF3:T/C3輸入捕捉匹配標(biāo)志位
    // OCF3A:T/C3輸出比較A匹配標(biāo)志位
    // OCF3B:T/C3輸出比較B匹配標(biāo)志位
    // TOV3:T/C3溢出標(biāo)志位
    // OCF3C:T/C3輸出比較C匹配標(biāo)志位
    // OCF1C:T/C1輸出比較C匹配標(biāo)志位



    //ASSR T/C0異步狀態(tài)寄存器
    // -----------------------------------------------------------------
    // |   -   |   -   |   -   |   -   |  AS0  | TCN0UB| OCR0UB| TCR0UB|
    // -----------------------------------------------------------------
    // AS0:T/C0使用外部時(shí)鐘
    // TCN0UB:TCNT0更新中,寫TCNT0時(shí)將置位,為0時(shí)表明TCNT0可以寫入新值
    // OCR0UB:OCR0更新中,寫OCR0時(shí)將置位,為0表明OCR0可以寫入新值
    // TCR0UB:TCCR0更新中,寫TCCR0時(shí)將置位,為0表明TCCR0可以寫入新值
    ASSR = 0;
}

void init_timer2()
{   

    //TCCR2 T/C2控制寄存器
    // -----------------------------------------------------------------
    // |  FOC2 | WGM20 | COM21 | COM20 | WGM21 |  CS22 |  CS21 |  CS20 |
    // -----------------------------------------------------------------
    // FOC2:強(qiáng)制輸出比較啟動(dòng)
    // WGM21, WGM20: 工作模式選擇
    //              00:普通模式,01:PWM相位修正,
    //              10:比較匹配時(shí)清除計(jì)數(shù)器模式(CTC模式),11:快速PWM
    // COM21, COM20: 比較匹配時(shí)的輸出模式
    //          WGMxx為普通模式或CTC模式時(shí)
    //              00:OC0未連接,
    //              01:OC0取反,
    //              10:OC0清零,
    //              11:OC0置位
    //          WGMxx為相位修正PWM模式
    //              00:OC0未連接,
    //              01:保留,
    //              10:升序匹配時(shí)清零OC0;降序匹配時(shí)置位OC0,
    //              11:升序匹配時(shí)置位OC0;降序匹配時(shí)清零OC0
    //          WGMxx為快速PWM模式
    //              00:OC0未連接
    //              01:保留
    //              10:匹配時(shí)OC0清零;計(jì)數(shù)到TOP時(shí)OC0置位
    //              11:匹配時(shí)OC0置位;計(jì)數(shù)到TOP時(shí)OC0清零
    // CS22,CS21,CS20:T/C0時(shí)鐘預(yù)分頻選擇
    //              000:無時(shí)鐘,T/C不工作     001:1/1
    //              010:1/8     011:1/32     100:1/64
    //              101:1/128   110:1/256    111:1/1024
    TCCR2 = 0;

    //TCNT2 T/C2計(jì)數(shù)寄存器,8位

    //OCR2 T/C2比較寄存器,8位
}

void init_timer1()
{
    //TCCR1A T/C1控制寄存器A
    // -----------------------------------------------------------------
    // | COM1A1| COM1A0| COM1B1| COM1B0| COM1C1| COM1C0| WGM11 | WGM10 |
    // -----------------------------------------------------------------
    //TCCR1B T/C1控制寄存器B
    // -----------------------------------------------------------------
    // | ICNC1 | ICES1 |   -   | WGM13 | WGM12 |  CS12 |  CS11 |  CS10 |
    // -----------------------------------------------------------------
    //TCCR1C T/C1控制寄存器C
    // -----------------------------------------------------------------
    // | FOC1A | FOC1B | FOC1C |   -   |   -   |   -   |   -   |   -   |
    // -----------------------------------------------------------------
    // COM1A1,COM1A0:通道A的比較輸出模式
    // COM1B1,COM1B0:通道B的比較輸出模式
    // COM1C1,COM1C0:通道C的比較輸出模式
    // WGM13,WGM12,WGM11,WGM10:波型發(fā)生模式:
    //              比較輸出模式(CTC模式),非PWM
    //                  00  普通端口操作,OC1A/OC1B/OC1C未連接
    //                  01  比較匹配時(shí)OC1A/OC1B/OC1C電平取反
    //                  10  比較匹配時(shí)清零OC1A/OC1B/OC1C(輸出低電平)
    //                  11  比較匹配時(shí)置位OC1A/OC1B/OC1C(輸出高電平)
    //              比較輸出模式(CTC模式),快速PWM
    //                  00  普通端口操作,OC1A/OC1B/OC1C未連接
    //                  01  WGM13為0時(shí)同上,為1時(shí) 比較匹配時(shí) OC1A電平取反,OC1B/OC1C保留
    //                  10  比較匹配時(shí)OC1A/OC1B/OC1C清零,在TOP時(shí)OC1A/OC1B/OC1C置位
    //                  11  比較匹配時(shí)OC1A/OC1B/OC1C置位,在TOP時(shí)OC1A/OC1B/OC1C清零
    //              比較輸出模式(CTC模式),相位修正及相頻修正PWM
    //                  00  普通端口操作,OC1A/OC1B/OC1C未連接
    //                  01  WGM13為0:同上,為1時(shí) 比較匹配時(shí) OC1A電平取反,OC1B/OC1C保留
    //                  10  升序計(jì)數(shù)匹配時(shí)將OC1A/OC1B/OC1C清零,降序計(jì)數(shù)匹配時(shí)將OC1A/OC1B/OC1C置位
    //                  11  升序計(jì)數(shù)匹配時(shí)將OC1A/OC1B/OC1C置位,降序計(jì)數(shù)匹配時(shí)將OC1A/OC1B/OC1C清零
    //
    //   模式 WGM1x   工作模式說明     TOP   OCR1x更新時(shí)刻  TOVn置位時(shí)刻
    //     0   0000       普通模式    0xFFFF        立即            MAX
    //     1   0001   8位相位修正PWM  0x00FF         TOP         BOTTOM
    //     2   0010   9位相位修正PWM  0x01FF         TOP         BOTTOM
    //     3   0011  10位相位修正PWM  0x03FF         TOP         BOTTOM
    //     4   0100              CTC   OCRnA        立即            MAX
    //     5   0101       8位快速PWM  0x00FF         TOP            TOP
    //     6   0110       9位快速PWM  0x01FF         TOP            TOP
    //     7   0111      10位快速PWM  0x03FF         TOP            TOP
    //     8   1000  相位頻率修正PWM    ICRn      BOTTOM         BOTTOM
    //     9   1001  相位頻率修正PWM   OCRnA      BOTTOM         BOTTOM
    //    10   1010      相位修正PWM    ICRn         TOP         BOTTOM
    //    11   1011      相位修正PWM   OCRnA         TOP         BOTTOM
    //    12   1100              CTC    ICRn        立即            MAX
    //    13   1101             保留      -          -               -
    //    14   1110          快速PWM    ICRn         TOP            TOP
    //    15   1111          快速PWM   OCRnA         TOP            TOP
    // ICNC1:使能/禁止輸入捕捉噪聲抑制器
    // ICES1:輸入捕獲觸發(fā)沿選擇,0為下降沿觸發(fā),1為上升沿觸發(fā)
    // CS12,CS11,CS10:T/C0時(shí)鐘預(yù)分頻選擇
    //              000:無時(shí)鐘,T/C不工作     001:1/1
    //              010:1/8     011:1/64     100:1/256
    //              101:1/1024  110:外部T1腳下降沿驅(qū)動(dòng)    111:外部T1腳上升沿驅(qū)動(dòng)
    // FOC1A,F(xiàn)OC1B,F(xiàn)OC1C:強(qiáng)制輸出比較通道A,B,C
    TCCR1A =0; TCCR1B =0; //TCCR1C = 0;
   //TCNT1H,TCNT1L 定時(shí)/計(jì)數(shù)器1

    //OCR1AH,OCR1AL 輸出比較寄存器1A
    //OCR1BH,OCR1BL 輸出比較寄存器1B
    //OCR1CH,OCR1CL 輸出比較寄存器1C

    //ICR1H,ICR1L 輸入捕捉寄存器1

}

void init_timer3()
{
    //TCCR3A T/C3控制寄存器A
    // -----------------------------------------------------------------
    // | COM3A1| COM3A0| COM3B1| COM3B0| COM3C1| COM3C0| WGM31 | WGM30 |
    // -----------------------------------------------------------------
    //TCCR3B T/C3控制寄存器B
    // -----------------------------------------------------------------
    // | ICNC3 | ICES3 |   -   | WGM33 | WGM32 |  CS32 |  CS31 |  CS30 |
    // -----------------------------------------------------------------
    //TCCR3C T/C3控制寄存器C
    // -----------------------------------------------------------------
    // | FOC3A | FOC3B | FOC3C |   -   |   -   |   -   |   -   |   -   |
    // -----------------------------------------------------------------
    // COM3A1,COM3A0:通道A的比較輸出模式
    // COM3B1,COM3B0:通道B的比較輸出模式
    // COM3C1,COM3C0:通道C的比較輸出模式
    // WGM33,WGM32,WGM31,WGM30:波型發(fā)生模式:
    //              比較輸出模式(CTC模式),非PWM
    //                  00  普通端口操作,OC3A/OC3B/OC3C未連接
    //                  01  比較匹配時(shí)OC3A/OC3B/OC3C電平取反
    //                  10  比較匹配時(shí)清零OC3A/OC3B/OC3C(輸出低電平)
    //                  11  比較匹配時(shí)置位OC3A/OC3B/OC3C(輸出高電平)
    //              比較輸出模式(CTC模式),快速PWM
    //                  00  普通端口操作,OC3A/OC3B/OC3C未連接
    //                  01  WGM13為0時(shí)同上,為1時(shí) 比較匹配時(shí) OC3A電平取反,OC3B/OC3C保留
    //                  10  比較匹配時(shí)OC3A/OC3B/OC3C清零,在TOP時(shí)OC3A/OC3B/OC3C置位
    //                  11  比較匹配時(shí)OC3A/OC3B/OC3C置位,在TOP時(shí)OC3A/OC3B/OC3C清零
    //              比較輸出模式(CTC模式),相位修正及相頻修正PWM
    //                  00  普通端口操作,OC3A/OC3B/OC3C未連接
    //                  01  WGM13為0:同上,為1時(shí) 比較匹配時(shí) OC3A電平取反,OC3B/OC3C保留
    //                  10  升序計(jì)數(shù)匹配時(shí)將OC3A/OC3B/OC3C清零,降序計(jì)數(shù)匹配時(shí)將OC3A/OC3B/OC3C置位
    //                  11  升序計(jì)數(shù)匹配時(shí)將OC3A/OC3B/OC3C置位,降序計(jì)數(shù)匹配時(shí)將OC3A/OC3B/OC3C清零
    //
    //   模式 WGM3x   工作模式說明     TOP   OCR1x更新時(shí)刻  TOVn置位時(shí)刻
    //     0   0000       普通模式    0xFFFF        立即            MAX
    //     1   0001   8位相位修正PWM  0x00FF         TOP         BOTTOM
    //     2   0010   9位相位修正PWM  0x01FF         TOP         BOTTOM
    //     3   0011  10位相位修正PWM  0x03FF         TOP         BOTTOM
    //     4   0100              CTC   OCRnA        立即            MAX
    //     5   0101       8位快速PWM  0x00FF         TOP            TOP
    //     6   0110       9位快速PWM  0x01FF         TOP            TOP
    //     7   0111      10位快速PWM  0x03FF         TOP            TOP
    //     8   1000  相位頻率修正PWM    ICRn      BOTTOM         BOTTOM
    //     9   1001  相位頻率修正PWM   OCRnA      BOTTOM         BOTTOM
    //    10   1010      相位修正PWM    ICRn         TOP         BOTTOM
    //    11   1011      相位修正PWM   OCRnA         TOP         BOTTOM
    //    12   1100              CTC    ICRn        立即            MAX
    //    13   1101             保留      -          -               -
    //    14   1110          快速PWM    ICRn         TOP            TOP
    //    15   1111          快速PWM   OCRnA         TOP            TOP
    // ICNC3:使能/禁止輸入捕捉噪聲抑制器
    // ICES3:輸入捕獲觸發(fā)沿選擇,0為下降沿觸發(fā),1為上升沿觸發(fā)
    // CS32,CS31,CS30:T/C0時(shí)鐘預(yù)分頻選擇
    //              000:無時(shí)鐘,T/C不工作     001:1/1
    //              010:1/8     011:1/64     100:1/256
    //              101:1/1024  110:外部T1腳下降沿驅(qū)動(dòng)    111:外部T1腳上升沿驅(qū)動(dòng)
    // FOC3A,F(xiàn)OC3B,F(xiàn)OC3C:強(qiáng)制輸出比較通道A,B,C
//    TCCR3A = TCCR3B = TCCR3C = 0;

    //TCNT3H,TCNT3L 定時(shí)/計(jì)數(shù)器3

    //OCR3AH,OCR3AL 輸出比較寄存器3A
    //OCR3BH,OCR3BL 輸出比較寄存器3B
    //OCR3CH,OCR3CL 輸出比較寄存器3C

    //ICR3H,ICR3L 輸入捕捉寄存器3
}


void init_uart(void)
{
    //UDRn USART I/O數(shù)據(jù)寄存器, 不可用讀修改寫命令操作, 否則會(huì)改變FIFO狀態(tài)

    //UCSRnA USART控制和狀態(tài)寄存器A
    // -----------------------------------------------------------------
    // |  RXCn |  TXCn | UDREn |  FEn  |  DORn |  UPEn |  U2Xn | MPCMn |
    // -----------------------------------------------------------------
    // RXCn:USART接收結(jié)束標(biāo)志
    // TXCn:USART發(fā)送結(jié)束標(biāo)志,寫1可清除
    // UDREn:USART數(shù)據(jù)寄存器為空標(biāo)志,只有該標(biāo)志為1才數(shù)據(jù)才可寫入U(xiǎn)DR0
    // FEn:幀錯(cuò)誤,未正確收到停止位
    // DORn:數(shù)據(jù)過速
    // UPEn:奇偶效驗(yàn)錯(cuò)誤
    // U2Xn:倍速發(fā)送,僅對異步操作有影響
    // MPCMn:多處理器通訊模式

    //UCSRnB USART控制和狀態(tài)寄存器B
    // -----------------------------------------------------------------
    // | RXCIEn| TXCIEn| UDRIEn| RXENn | TXENn | UCSZn2| RXB8n | TXB8n |
    // -----------------------------------------------------------------
    // RXCIEn:接收結(jié)束中斷使能
    // TXCIEn:發(fā)送結(jié)束中斷使能
    // UDRIEn:USART數(shù)據(jù)寄存器空中使能
    // RXENn:接收使能
    // TXENn:發(fā)送使能
    // UCSZn2:字符長度,具體見下面
    // RXB8n:接收數(shù)據(jù)位8
    // TXB8n:發(fā)送數(shù)據(jù)位8

    //UCSRxC USART控制和狀態(tài)寄存器C
    // -----------------------------------------------------------------
    // |   -   | UMSELn| UPMn1 | UPMn0 | USBSn | UCSZn1| UCXZn0| UCPOLn|
    // -----------------------------------------------------------------
    // UMSELn:模式選擇,0為異步操作,1為同步操作
    // UPMn1,UPMn0:奇偶效驗(yàn)?zāi)J剑?0禁止,01保留,10偶效驗(yàn),11奇校驗(yàn)
    // USBSn:停止位選擇,0為1位停止位,1為2位停止位
    // UCSZn2,UCSZn0:字符長度,000為5位, 001為 6位,010為7位, 011為8位
    //                         100為保留,101為保留,110為保留,111為9位
    // UCPOLn:時(shí)鐘極性,(異步模式應(yīng)清零)
    //                              UCPOL0   發(fā)送數(shù)據(jù)位置   接收數(shù)據(jù)位置
    //                                0        XCK0上升沿    XCK0下降沿
    //                                1        XCK0下降沿    XCK0上升沿

    //UBRRnL和UBRRnH USART波特率寄存器, UBRRnH15:12為保留位:
    // -----------------------------------------------------------------
    // |   -   |   -   |   -   |   -   | BIT11 | BIT10 | BIT09 | BIT08 |
    // -----------------------------------------------------------------
    // -----------------------------------------------------------------
    // | BIT07 | BIT06 | BIT05 | BIT04 | BIT03 | BIT02 | BIT01 | BIT00 |
    // -----------------------------------------------------------------

}   



void init_spi(void)
{

    //SPCR SPI控制寄存器
    // -----------------------------------------------------------------
    // |  SPIE |  SPE  |  DORD |  MSTR |  CPOL |  CPHA |  SPR1 | SPR0  |
    // -----------------------------------------------------------------
    // SPIE:SPI中斷使能
    // SPE:SPI使能
    // DORD:數(shù)據(jù)次序,為1時(shí)LSB先發(fā)送
    // MSTR:是否主機(jī)模式,若為主機(jī)模式,SS引腳配置為輸入,但被拉低則MSTR被清零
    //       SPSR的SPIF位置位。用戶必須重新設(shè)置MSTR位進(jìn)入主機(jī)模式。
    // CPOL:時(shí)鐘極性,為1時(shí)表示空閑時(shí)SCK為高電平,否則為低電平。
    // CPHA:時(shí)鐘相位,為0時(shí)為時(shí)鐘的起始沿采樣數(shù)據(jù),否則為終止沿采樣數(shù)據(jù)
    // SPR1,SPR0:SPI時(shí)鐘速率選擇:00  1/4, 01  1/16, 10  1/64, 11  1/128


    //SPSR SPI狀態(tài)寄存器
    // -----------------------------------------------------------------
    // |  SPIF |  WCOL |   -   |   -   |   -   |   -   |   -   | SPI2X |
    // -----------------------------------------------------------------
    // SPIF:SPI中斷標(biāo)志,串行發(fā)送結(jié)束后此位置位,對于查詢方式,可先讀SPSR,緊著
    //       訪問SPDR來對SPIF位清零。
    // WCOL:寫沖突標(biāo)志,可通過先讀SPSR,緊接著訪問SPDR來清零。
    // SPI2X:SPI倍速,若為主機(jī),SCK最高頻率可達(dá)CPU頻率一半,從機(jī)則只能保證為1/4


    //SPDR SPI數(shù)據(jù)寄存器
    // -----------------------------------------------------------------
    // |  MSB  |       |       |       |       |       |       |  LSB  |
    // -----------------------------------------------------------------
    // SPDR為可讀寫寄存器,寫則將啟動(dòng)數(shù)據(jù)傳輸,讀則讀取接收緩沖器

}   

void init_twi(void)
{
    //TWBR TWI比特率寄存器
    // -----------------------------------------------------------------
    // |  BIT7 |  BIT6 |  BIT5 |  BIT4 |  BIT3 |  BIT2 |  BIT1 |  BIT0 |
    // -----------------------------------------------------------------
    // SCL頻率 = CUP時(shí)鐘頻率/(16 + 2 * TWBR * 4 ^ TWPS)
    // TWBR值應(yīng)該不小于10, TWPS為預(yù)分頻值


    //TWCR TWI控制寄存器
    // -----------------------------------------------------------------
    // | TWINT |  TWEA | TWSTA | TWSTO |  TWWC |  TWEN |   -   |  TWIE |
    // -----------------------------------------------------------------
    // TWINT:TWI中斷標(biāo)志,TWINT標(biāo)志必須由軟件寫1清除, 即使在中斷服務(wù)程序中硬件也不會(huì)自動(dòng)清除
    //        在清除TWI標(biāo)志前一定要首先完成對TWAR TWSR TWDR的訪問, 此位清零后TWI立即開始工作。
    // TWEA:使能TWI應(yīng)答,此位控制應(yīng)答脈沖的產(chǎn)生。
    // TWSTA:START狀態(tài)位,自己想成為主機(jī)時(shí)置此位,發(fā)送START后軟件必須清零TWSTA。
    // TWSTO:STOP狀態(tài)位。主模式下,置此位將在總線上產(chǎn)生STOP狀態(tài),后TWSTO自動(dòng)清零;從機(jī)模式下
    //        置此位可使接口從錯(cuò)誤狀態(tài)恢復(fù)到未被尋址的狀態(tài),此時(shí)總線上不會(huì)產(chǎn)生STOP狀態(tài)。
    // TWWC:TWI寫沖突標(biāo)志。每次寫TWDR時(shí)都將更新此標(biāo)志。
    // TWEN:TWI使能位。置1時(shí)TWI引腳將從IO引腳切換到SCL和SDA引腳。
    // TWIE:TWI中斷使能。


    //TWSR TWI狀態(tài)寄存器
    // -----------------------------------------------------------------
    // |  TWS7 |  TWS6 |  TWS5 |  TWS4 |  TWS3 |   -   | TWPS1 | TWPS0 |
    // -----------------------------------------------------------------
    // TWS7~TWS3:TWI狀態(tài)
    // TWPS1~TWPS0:TWI預(yù)分頻值。00:1; 01:1/4; 10:1/16; 11:1/64。


    //TWDR TWI數(shù)據(jù)寄存器
    // -----------------------------------------------------------------
    // |  BIT7 |  BIT6 |  BIT5 |  BIT4 |  BIT3 |  BIT2 |  BIT1 |  BIT0 |
    // -----------------------------------------------------------------
    // 發(fā)送模式,TWDR中包含了要發(fā)送的字節(jié),接收模式TWDR包含了接收到的數(shù)據(jù)。
    // 只要TWINT置位,TWDR的數(shù)據(jù)就是穩(wěn)定的。


    //TWAR TWI從機(jī)地址寄存器
    // -----------------------------------------------------------------
    // |  TWA6 |  TWA5 |  TWA4 |  TWA3 |  TWA2 |  TWA1 |  TWA0 | TWGCE |
    // -----------------------------------------------------------------
    // TWA6~TWA0:TWI從機(jī)地址寄存器
    // TWGCE:使能TWI廣播識(shí)別


}

    //GICR 通用中斷控制寄存器
    // -----------------------------------------------------------------
    // |  INT1 |  INT0 |  INT2 |   -   |   -   |   -   | IVSEL |  IVCE |
    // -----------------------------------------------------------------
    // INT1:使能外部中斷1請求
    // INT0:使能外部中斷0請求
    // INT2:使能外部中斷2請求
    // IVSEL:中斷向量選擇,為0時(shí)中斷向量位于FLASH起始地址,為1時(shí)位于BOOT區(qū)起始地址
    // IVCE:中斷向量修改使能。改變IVSEL時(shí)IVCE必須置位。

    //MCUCR MCU控制寄存器
    // -----------------------------------------------------------------
    // |  SM2  |   SE  |  SM1  |  SM0  | ISC11 | ISC10 | ISC01 | ISC00 |
    // -----------------------------------------------------------------
    // SM2, SM1, SM0:000:空閑模式  
    //                001:ADC噪聲抑制模式
    //                010:掉電模式
    //                011:省電模式
    //                100:保留
    //                101:保留
    //                110:Standby模式
    //                111:擴(kuò)展Standby模式
    //SE:休眠使能
    //ISC11, ISC10: 00:INT1為低電平時(shí)產(chǎn)生中斷請求
    //               01:INT1引腳上任意的邏輯電平變化都將引發(fā)中斷
    //               10:INT1的下降沿產(chǎn)生異步中斷請求
    //               11:INT1的上升沿產(chǎn)生異步中斷請求
    //ISC01, ISC00:  00:INT0為低電平時(shí)產(chǎn)生中斷請求
    //               01:INT0引腳上任意的邏輯電平變化都將引發(fā)中斷
    //               10:INT0的下降沿產(chǎn)生異步中斷請求
    //               11:INT0的上升沿產(chǎn)生異步中斷請求



    //MCUCSR MCU控制和狀態(tài)寄存器
    // -----------------------------------------------------------------
    // |  JTD  |   -   |   -   |  JTRF |  WDRF |  BORF | FXTRF |  PORF |
    // -----------------------------------------------------------------
    // JTD:
    // JTRF:JTAG復(fù)位標(biāo)志
    // WDRF:看門狗復(fù)位標(biāo)志
    // BORF:掉電檢測復(fù)位標(biāo)志
    // EXTRF:外部復(fù)位標(biāo)志
    // PORF:上電復(fù)位標(biāo)志


    //WDTCR 看門狗定時(shí)器控制寄存器
    // -----------------------------------------------------------------
    // |   -   |   -   |   -   |  WDCE |  WDE  |  WDP2 |  WDP1 |  WDP0 |
    // -----------------------------------------------------------------
    // WDCE:看門狗修改使能,清零WDE位時(shí)必須先置位WDCE位,否則不能禁止看門狗
    // WDE:看門狗使能,只有WDCE為1時(shí)WDE才能清零
    // WDP2~WDP0:看門狗定時(shí)器預(yù)分頻值   WDT振蕩周期  VCC=3V時(shí)溢出時(shí)間  VCC=5V時(shí)溢出時(shí)間
    //                            000:     16K            14.8ms            14.0ms
    //                            001:     32K            29.6ms            28.1ms
    //                            010:     64K            59.1ms            56.2ms
    //                            011:    128K             0.12s             0.11s
    //                            100:    256K             0.24s             0.22s
    //                            101:    512K             0.47s             0.45s
    //                            110:   1024K             0.95s             0.9s
    //                            111:   2048K             1.9s              1.8s


    //EEARH/EEARL EEPROM地址寄存器
    //EEARH
    // -----------------------------------------------------------------
    // |   -   |   -   |   -   |   -   | EEAR11| EEAR10| EEAR9 | EEAR8 |
    // -----------------------------------------------------------------
    //EEARL
    // -----------------------------------------------------------------
    // | EEAR7 | EEAR6 | EEAR5 | EEAR4 | EEAR3 | EEAR2 | EEAR1 | EEAR0 |
    // -----------------------------------------------------------------
    //EEPROM地址,在訪問EEPROM前必須為其賦予正確的數(shù)據(jù)

    //EEDR EEPROM數(shù)據(jù)寄存器   
    // -----------------------------------------------------------------
    // |  MSB  |  ...  |  ...  |  ...  |  ...  |  ...  |  ...  |  LSB  |
    // -----------------------------------------------------------------

    //EECR EEPROM控制寄存器
    // -----------------------------------------------------------------
    // |   -   |   -   |   -   |   -   | EERIE | EEMWE |  EEWE |  EERE |
    // -----------------------------------------------------------------
    //EERIE:EEPROM就緒中斷使能
    //EEMWE:EEPROM主機(jī)寫使能,當(dāng)此位為1時(shí),在4個(gè)時(shí)鐘內(nèi)EEWE置位,數(shù)據(jù)將寫入EEPROM
    //          EEMWE置位4個(gè)時(shí)鐘后硬件將其清零
    //EEWE:EEPROM寫使能
    //EERE:EEPROM讀使能。當(dāng)EEPROM地址設(shè)置好后,需置位EERE以便將數(shù)據(jù)讀入EEAR
    //EEPROM寫時(shí)序:
    //a等待EEWE位為0
    //b等待SPMCSR的SPMEN位為0,此步只在軟件包含引導(dǎo)程序,且允許CPU對Flash編程時(shí)才有用
    //c將新的EEPROM地址寫入EEAR
    //d將新的EEPROM數(shù)據(jù)寫入EEDR
    //e對EECR的EEMWE位寫1,同時(shí)清零EEWE位
    //f在置位EEMWE位的4個(gè)周期內(nèi)置位EEWE位
int main()
{
   // Write your code here
   while (1)
      ;
   return 0;
}



作者: cdhigh    時(shí)間: 2022-1-2 08:26
先抄了,方便一些,不用每個(gè)比特位都查手冊




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲一区二区三区免费观看 | 人人干人人干人人 | 激情久久av一区av二区av三区 | 久久成人精品一区二区三区 | 久久久精品一区二区 | 成人午夜精品一区二区三区 | av超碰 | 亚洲一区二区三区在线播放 | 精品日韩电影 | 精品入口麻豆88视频 | 黄色片网此 | 国产一级视频在线播放 | 中文字幕亚洲在线 | 国产综合av | 国产精品伦一区二区三级视频 | 欧美国产日韩精品 | 国产精品成人一区二区三区 | 欧美性受xxxx| 国产在线一区二区三区 | 精品久久久久久亚洲综合网站 | 91在线精品秘密一区二区 | 久操av在线 | 国产精品一区二区在线免费观看 | 日本亚洲精品 | 人人擦人人| 午夜免费 | 中文字幕日韩一区 | 国产男女猛烈无遮掩视频免费网站 | 亚洲精品久久久一区二区三区 | 男人天堂久久 | 国产欧美久久精品 | 日韩性生活网 | 中文字幕在线电影观看 | 国产精品夜夜春夜夜爽久久电影 | 91精品国产综合久久久动漫日韩 | 国产成人网 | 婷婷去俺也去 | 九九精品在线 | 日韩欧美在线观看 | 日韩精品免费视频 | 极品久久 |