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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3263|回復: 1
打印 上一主題 下一主題
收起左側

atmega16單片機寄存器配置介紹 這個程序比查看手冊方便多了

[復制鏈接]
跳轉到指定樓層
樓主
ID:342822 發表于 2021-12-26 10:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
網上找到的,這個比查看手冊方便多了。
#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數據寄存器,PINx輸入引腳寄存器
    // DDRxn相應位為1,引腳為輸出否則為輸入
    // PORTxn為1時,上拉電阻使能
    DDRA = 0x00;
}

void init_adc()
{
    // ADMUX
    // -----------------------------------------------------------------
    // | REFS1 | REFS0 | ADLAR |  MUX4 |  MUX3 |  MUX2 |  MUX1 |  MUX0 |
    // -----------------------------------------------------------------
    // REFS1 REFS0: 00,使用AREF,內部參考電壓關閉
    //              01,AVCC、AREF引腳外加濾波電容
    //                 10,保留
    //                 11,2.56V片內基準電壓,AREF引腳外加濾波電容
    // ADLAR: ADC轉換結果左對齊
    //  MUX4 ~  MUX0   單端輸入  正差分輸入   負差分輸入   增益
    // 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使能,轉換過程中禁止ADC則立即中止轉換。
    // ADSC:ADC開始轉換。在轉換過程中ADSC為1直到轉換結束。
    // ADFR:是否工作在連續模式,該位寫0,停止連續轉換模式。
    // ADIF:ADC中斷標志。中斷服務硬件清零。
    // ADIE:ADC中斷使能
    // ADSP2 ~ ADSP0:ADC預分頻選擇  000:2分頻,001到111為2到128分頻
    //               ADC在50~200KHz時鐘時能獲得最大精度
    ADCSRA = 0;

    // ADCC & ADCH
    // ADC轉換結果寄存器,差分通道結果以2的補碼形式表示,ADC數據必須讀過
    // ADCH后才可進行數據更新。對于精度小于8位的左對齊數據可只讀ADCH。
    // 數據右對齊(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同步模式。置位時,PSR0和PSR321保持其數據直到被更新或TSM被清零
    // PSR0:T/C0預分頻器復位,置位時使預頻器復位,直到為0時表示復位完成
    // PSR321: T/C3、2、1預分頻繁器復位,此位讀總為0
    // ACME: 模擬比較器使能
    // PUD: 所有端口上拉電阻禁止,置1為禁止
    SFIOR = 0;

}
void init_timer0()
{
    //TCCR0 T/C0控制寄存器
    // -----------------------------------------------------------------
    // |  FOC0 | WGM00 | COM01 | COM00 | WGM01 |  CS02 |  CS01 |  CS00 |
    // -----------------------------------------------------------------
    // FOC0:強制輸出比較啟動
    // WGM01, WGM00: 工作模式選擇
    //              00:普通模式,01:PWM相位修正,
    //              10:比較匹配時清除計數器模式(CTC模式),11:快速PWM
    // COM01, COM00: 比較匹配時的輸出模式
    //          WGMxx為普通模式或CTC模式時
    //              00:OC0未連接,
    //              01:OC0取反,
    //              10:OC0清零,
    //              11:OC0置位
    //          WGMxx為相位修正PWM模式
    //              00:OC0未連接,
    //              01:保留,
    //              10:升序匹配時清零OC0;降序匹配時置位OC0,
    //              11:升序匹配時置位OC0;降序匹配時清零OC0
    //          WGMxx為快速PWM模式
    //              00:OC0未連接
    //              01:保留
    //              10:匹配時OC0清零;計數到TOP時OC0置位
    //              11:匹配時OC0置位;計數到TOP時OC0清零
    // CS02,CS01,CS00:T/C0時鐘預分頻選擇
    //              000:無時鐘,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計數寄存器,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擴展中斷屏蔽寄存器
    // -----------------------------------------------------------------
    // |   -   |   -   | 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中斷標志寄存器
    // -----------------------------------------------------------------
    // |  OCF2 |  TOV2 |  ICF1 | OCF1A | OCF1B |  TOV1 |  OCF0 |  TOV0 |
    // -----------------------------------------------------------------
    // OCF2:T/C2輸出比較匹配標志
    // TOV2:T/C2溢出標志
    // ICF1:T/C1輸入捕捉標志位
    // OCF1A:T/C1輸出比較A匹配標志位
    // OCF1B:T/C1輸出比較B匹配標志位
    // TOV1:T/C1溢出標志
    // OCF0:T/C0輸出比較匹配標志
    // TOV0:T/C0溢出標志


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



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

void init_timer2()
{   

    //TCCR2 T/C2控制寄存器
    // -----------------------------------------------------------------
    // |  FOC2 | WGM20 | COM21 | COM20 | WGM21 |  CS22 |  CS21 |  CS20 |
    // -----------------------------------------------------------------
    // FOC2:強制輸出比較啟動
    // WGM21, WGM20: 工作模式選擇
    //              00:普通模式,01:PWM相位修正,
    //              10:比較匹配時清除計數器模式(CTC模式),11:快速PWM
    // COM21, COM20: 比較匹配時的輸出模式
    //          WGMxx為普通模式或CTC模式時
    //              00:OC0未連接,
    //              01:OC0取反,
    //              10:OC0清零,
    //              11:OC0置位
    //          WGMxx為相位修正PWM模式
    //              00:OC0未連接,
    //              01:保留,
    //              10:升序匹配時清零OC0;降序匹配時置位OC0,
    //              11:升序匹配時置位OC0;降序匹配時清零OC0
    //          WGMxx為快速PWM模式
    //              00:OC0未連接
    //              01:保留
    //              10:匹配時OC0清零;計數到TOP時OC0置位
    //              11:匹配時OC0置位;計數到TOP時OC0清零
    // CS22,CS21,CS20:T/C0時鐘預分頻選擇
    //              000:無時鐘,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計數寄存器,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:波型發生模式:
    //              比較輸出模式(CTC模式),非PWM
    //                  00  普通端口操作,OC1A/OC1B/OC1C未連接
    //                  01  比較匹配時OC1A/OC1B/OC1C電平取反
    //                  10  比較匹配時清零OC1A/OC1B/OC1C(輸出低電平)
    //                  11  比較匹配時置位OC1A/OC1B/OC1C(輸出高電平)
    //              比較輸出模式(CTC模式),快速PWM
    //                  00  普通端口操作,OC1A/OC1B/OC1C未連接
    //                  01  WGM13為0時同上,為1時 比較匹配時 OC1A電平取反,OC1B/OC1C保留
    //                  10  比較匹配時OC1A/OC1B/OC1C清零,在TOP時OC1A/OC1B/OC1C置位
    //                  11  比較匹配時OC1A/OC1B/OC1C置位,在TOP時OC1A/OC1B/OC1C清零
    //              比較輸出模式(CTC模式),相位修正及相頻修正PWM
    //                  00  普通端口操作,OC1A/OC1B/OC1C未連接
    //                  01  WGM13為0:同上,為1時 比較匹配時 OC1A電平取反,OC1B/OC1C保留
    //                  10  升序計數匹配時將OC1A/OC1B/OC1C清零,降序計數匹配時將OC1A/OC1B/OC1C置位
    //                  11  升序計數匹配時將OC1A/OC1B/OC1C置位,降序計數匹配時將OC1A/OC1B/OC1C清零
    //
    //   模式 WGM1x   工作模式說明     TOP   OCR1x更新時刻  TOVn置位時刻
    //     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:輸入捕獲觸發沿選擇,0為下降沿觸發,1為上升沿觸發
    // CS12,CS11,CS10:T/C0時鐘預分頻選擇
    //              000:無時鐘,T/C不工作     001:1/1
    //              010:1/8     011:1/64     100:1/256
    //              101:1/1024  110:外部T1腳下降沿驅動    111:外部T1腳上升沿驅動
    // FOC1A,FOC1B,FOC1C:強制輸出比較通道A,B,C
    TCCR1A =0; TCCR1B =0; //TCCR1C = 0;
   //TCNT1H,TCNT1L 定時/計數器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:波型發生模式:
    //              比較輸出模式(CTC模式),非PWM
    //                  00  普通端口操作,OC3A/OC3B/OC3C未連接
    //                  01  比較匹配時OC3A/OC3B/OC3C電平取反
    //                  10  比較匹配時清零OC3A/OC3B/OC3C(輸出低電平)
    //                  11  比較匹配時置位OC3A/OC3B/OC3C(輸出高電平)
    //              比較輸出模式(CTC模式),快速PWM
    //                  00  普通端口操作,OC3A/OC3B/OC3C未連接
    //                  01  WGM13為0時同上,為1時 比較匹配時 OC3A電平取反,OC3B/OC3C保留
    //                  10  比較匹配時OC3A/OC3B/OC3C清零,在TOP時OC3A/OC3B/OC3C置位
    //                  11  比較匹配時OC3A/OC3B/OC3C置位,在TOP時OC3A/OC3B/OC3C清零
    //              比較輸出模式(CTC模式),相位修正及相頻修正PWM
    //                  00  普通端口操作,OC3A/OC3B/OC3C未連接
    //                  01  WGM13為0:同上,為1時 比較匹配時 OC3A電平取反,OC3B/OC3C保留
    //                  10  升序計數匹配時將OC3A/OC3B/OC3C清零,降序計數匹配時將OC3A/OC3B/OC3C置位
    //                  11  升序計數匹配時將OC3A/OC3B/OC3C置位,降序計數匹配時將OC3A/OC3B/OC3C清零
    //
    //   模式 WGM3x   工作模式說明     TOP   OCR1x更新時刻  TOVn置位時刻
    //     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:輸入捕獲觸發沿選擇,0為下降沿觸發,1為上升沿觸發
    // CS32,CS31,CS30:T/C0時鐘預分頻選擇
    //              000:無時鐘,T/C不工作     001:1/1
    //              010:1/8     011:1/64     100:1/256
    //              101:1/1024  110:外部T1腳下降沿驅動    111:外部T1腳上升沿驅動
    // FOC3A,FOC3B,FOC3C:強制輸出比較通道A,B,C
//    TCCR3A = TCCR3B = TCCR3C = 0;

    //TCNT3H,TCNT3L 定時/計數器3

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

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


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

    //UCSRnA USART控制和狀態寄存器A
    // -----------------------------------------------------------------
    // |  RXCn |  TXCn | UDREn |  FEn  |  DORn |  UPEn |  U2Xn | MPCMn |
    // -----------------------------------------------------------------
    // RXCn:USART接收結束標志
    // TXCn:USART發送結束標志,寫1可清除
    // UDREn:USART數據寄存器為空標志,只有該標志為1才數據才可寫入UDR0
    // FEn:幀錯誤,未正確收到停止位
    // DORn:數據過速
    // UPEn:奇偶效驗錯誤
    // U2Xn:倍速發送,僅對異步操作有影響
    // MPCMn:多處理器通訊模式

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

    //UCSRxC USART控制和狀態寄存器C
    // -----------------------------------------------------------------
    // |   -   | UMSELn| UPMn1 | UPMn0 | USBSn | UCSZn1| UCXZn0| UCPOLn|
    // -----------------------------------------------------------------
    // UMSELn:模式選擇,0為異步操作,1為同步操作
    // UPMn1,UPMn0:奇偶效驗模式,00禁止,01保留,10偶效驗,11奇校驗
    // USBSn:停止位選擇,0為1位停止位,1為2位停止位
    // UCSZn2,UCSZn0:字符長度,000為5位, 001為 6位,010為7位, 011為8位
    //                         100為保留,101為保留,110為保留,111為9位
    // UCPOLn:時鐘極性,(異步模式應清零)
    //                              UCPOL0   發送數據位置   接收數據位置
    //                                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:數據次序,為1時LSB先發送
    // MSTR:是否主機模式,若為主機模式,SS引腳配置為輸入,但被拉低則MSTR被清零
    //       SPSR的SPIF位置位。用戶必須重新設置MSTR位進入主機模式。
    // CPOL:時鐘極性,為1時表示空閑時SCK為高電平,否則為低電平。
    // CPHA:時鐘相位,為0時為時鐘的起始沿采樣數據,否則為終止沿采樣數據
    // SPR1,SPR0:SPI時鐘速率選擇:00  1/4, 01  1/16, 10  1/64, 11  1/128


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


    //SPDR SPI數據寄存器
    // -----------------------------------------------------------------
    // |  MSB  |       |       |       |       |       |       |  LSB  |
    // -----------------------------------------------------------------
    // SPDR為可讀寫寄存器,寫則將啟動數據傳輸,讀則讀取接收緩沖器

}   

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


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


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


    //TWDR TWI數據寄存器
    // -----------------------------------------------------------------
    // |  BIT7 |  BIT6 |  BIT5 |  BIT4 |  BIT3 |  BIT2 |  BIT1 |  BIT0 |
    // -----------------------------------------------------------------
    // 發送模式,TWDR中包含了要發送的字節,接收模式TWDR包含了接收到的數據。
    // 只要TWINT置位,TWDR的數據就是穩定的。


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


}

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

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



    //MCUCSR MCU控制和狀態寄存器
    // -----------------------------------------------------------------
    // |  JTD  |   -   |   -   |  JTRF |  WDRF |  BORF | FXTRF |  PORF |
    // -----------------------------------------------------------------
    // JTD:
    // JTRF:JTAG復位標志
    // WDRF:看門狗復位標志
    // BORF:掉電檢測復位標志
    // EXTRF:外部復位標志
    // PORF:上電復位標志


    //WDTCR 看門狗定時器控制寄存器
    // -----------------------------------------------------------------
    // |   -   |   -   |   -   |  WDCE |  WDE  |  WDP2 |  WDP1 |  WDP0 |
    // -----------------------------------------------------------------
    // WDCE:看門狗修改使能,清零WDE位時必須先置位WDCE位,否則不能禁止看門狗
    // WDE:看門狗使能,只有WDCE為1時WDE才能清零
    // WDP2~WDP0:看門狗定時器預分頻值   WDT振蕩周期  VCC=3V時溢出時間  VCC=5V時溢出時間
    //                            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前必須為其賦予正確的數據

    //EEDR EEPROM數據寄存器   
    // -----------------------------------------------------------------
    // |  MSB  |  ...  |  ...  |  ...  |  ...  |  ...  |  ...  |  LSB  |
    // -----------------------------------------------------------------

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


評分

參與人數 1黑幣 +50 收起 理由
admin + 50

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:67925 發表于 2022-1-2 08:26 來自手機 | 只看該作者
先抄了,方便一些,不用每個比特位都查手冊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 中文字幕在线一区二区三区 | 成人免费在线播放视频 | 精品视频在线观看 | 一区二区成人 | 午夜欧美 | 国产黄色电影 | 一区二区三区在线免费观看 | 精品国产乱码久久久久久久久 | 在线播放国产一区二区三区 | 国产日韩欧美在线观看 | 欧美中文字幕一区二区 | 懂色一区二区三区免费观看 | 国产在线精品一区二区 | 一区二区三区久久 | 波多野吉衣在线播放 | 一区二区三区电影在线观看 | 一区二区三区电影在线观看 | 狠狠躁18三区二区一区 | 九九九视频在线 | 欧美一级在线视频 | 亚洲精品日韩精品 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 成人免费精品 | 亚洲丝袜天堂 | 日韩高清不卡 | 欧美一区永久视频免费观看 | 日本免费黄色 | 日韩三级精品 | 国产亚洲精品美女久久久久久久久久 | 怡红院免费的全部视频 | 日韩黄色小视频 | 国产精品高潮呻吟久久 | 网黄在线 | 草比网站| 在线视频国产一区 | 欧美一区二区三区久久精品 | 99精彩视频| 免费三级网 | 久久精品视频一区二区三区 | 国产真实乱全部视频 |