<th id="alkcr"><pre id="alkcr"></pre></th>

  • 打印

    [8/16位單片機] 【8月曬板卡】+ 如何開啟按鍵的中斷方式和啟用定時器?

    [復制鏈接]
    512|8
    跳轉到指定樓層
    樓主
    一、如何啟用按鍵的中斷方式?
        按鍵的中斷方式比輪詢方式更合理高效,我查看了pin_manager.h中對引腳的宏定義,發現可以通過代碼來定義中斷,但不知道中斷處理函數是哪個、在哪個位置?
        這是我寫的配置代碼,不知道正確否:
    1. int main(void)
    2. {
    3.     /* Initializes MCU, drivers and middleware */
    4.     SYSTEM_Initialize();
    5.    
    6.     /* 開啟按鍵中斷 */
    7.     IO_PF6_SetDigitalInput();                  //設置數字輸入方式
    8.     IO_PF6_EnableInterruptForLowLevelSensing();//啟用低電平感應中斷
    9.    

    10.     /* Replace with your application code */
    11.     while (1){
    12.         if(IO_PF6_GetValue()==0){
    13.             DELAY_milliseconds(50);
    14.             if(IO_PF6_GetValue()==0){
    15.                 if(direction==1){
    16.                     delays = delays << 1;
    17.                     if(delays > 1000){
    18.                         direction = 0;
    19.                         delays = 800;
    20.                     }
    21.                 }
    22.                 else{
    23.                     delays = delays >> 1;
    24.                     if(delays < 100){
    25.                         direction = 1;
    26.                         delays = 100;
    27.                     }
    28.                 }
    29.             }
    30.         }
    31.         IO_PF5_Toggle();
    32.         DELAY_milliseconds(delays);
    33.     }
    34. }
    復制代碼





    二、如何啟用定時器
        我想啟用定時器的功能來控制LED的閃爍,免得使用低效的延時程序,但不清楚如何配置和啟用定時器,在數據手冊里也沒有找到有關定時器的部分,在此請教大家該如何配置和啟用定時器。

    使用特權

    評論回復
    沙發
     樓主 | 2019-10-3 18:19 | 只看該作者
        在pin_manager.c文件中找到了中斷處理函數(見下圖),但定時器配置和啟用仍不知道。



    使用特權

    評論回復
    板凳
     樓主 | 2019-10-3 18:29 | 只看該作者
        按鍵中斷方式測試不成功,也許是還有哪里沒有設置好。主函數中的代碼如下:
    1. int main(void)
    2. {
    3.     /* Initializes MCU, drivers and middleware */
    4.     SYSTEM_Initialize();
    5.    
    6.     /* 開啟按鍵中斷 */
    7.     IO_PF6_SetDigitalInput();                  //設置數字輸入方式
    8.     IO_PF6_EnableInterruptForLowLevelSensing();//啟用低電平感應中斷
    9.    

    10.     /* Replace with your application code */
    11.     while (1){
    12.         if(keys>0){
    13. //        if(IO_PF6_GetValue()==0){
    14.             keyok = 1;                        //鎖定按鍵,此時不接收新按鍵
    15.             DELAY_milliseconds(50);           //延時防抖
    16.             if(IO_PF6_GetValue()==0){
    17.                 if(direction==1){
    18.                     delays = delays << 1;
    19.                     if(delays > 1000){
    20.                         direction = 0;
    21.                         delays = 800;
    22.                     }
    23.                 }
    24.                 else{
    25.                     delays = delays >> 1;
    26.                     if(delays < 100){
    27.                         direction = 1;
    28.                         delays = 100;
    29.                     }
    30.                 }
    31.             }
    32.             keyok = 0;                      //釋放按鍵鎖定
    33.         }
    34.         IO_PF5_Toggle();
    35.         DELAY_milliseconds(delays);
    36.     }
    37. }
    復制代碼




        中斷處理函數中的代碼如下:
    1. void PORTF_IO_PF6_DefaultInterruptHandler(void)
    2. {
    3.     // add your PORTF_IO_PF6 interrupt custom code
    4.     if(keyok==0)
    5.         keys++;
    6.     // or set custom function using PORTF_IO_PF6_SetInterruptHandler()
    7. }
    復制代碼


    使用特權

    評論回復
    地板
     樓主 | 2019-10-3 18:39 | 只看該作者
    我啟用下降沿中斷也沒反映。


        IO_PF6_SetDigitalInput();                  //設置數字輸入方式
    //    IO_PF6_EnableInterruptForLowLevelSensing();//啟用低電平感應中斷
        IO_PF6_EnableInterruptForFallingEdge();    //啟用下降沿中斷

    使用特權

    評論回復

    評論

    gjiang6789 2019-10-5 21:11 回復TA
    暈暈乎乎的 
    5
     樓主 | 2019-10-3 18:40 | 只看該作者
    啟用雙邊緣中斷也無反映。

        /* 開啟按鍵中斷 */
    //    PORTF_IO_PF6_SetInterruptHandler();        //此函數的參數未知
        IO_PF6_SetDigitalInput();                  //設置數字輸入方式
    //    IO_PF6_EnableInterruptForLowLevelSensing();//啟用低電平感應中斷
    //    IO_PF6_EnableInterruptForFallingEdge();    //啟用下降沿中斷
        IO_PF6_EnableInterruptForBothEdges();      //啟用雙邊緣中斷

    使用特權

    評論回復
    6
    | 2019-10-4 12:01 | 只看該作者
    放到月月送討論區了

    使用特權

    評論回復
    7
    | 2019-10-5 12:03 | 只看該作者
    為何我自己寫的延時函數看不到效果

    使用特權

    評論回復
    8
     樓主 | 2019-10-5 18:29 | 只看該作者
    zhuomuniao110 發表于 2019-10-5 12:03
    為何我自己寫的延時函數看不到效果

    我的也是,三重循環,分別循環20000次都看不到延時效果,與沒有延時一樣。

    使用特權

    評論回復
    掃描二維碼,隨時隨地手機跟帖
    您需要登錄后才可以回帖 登錄 | 注冊

    本版積分規則

    我要發帖 投訴建議 創建版塊 申請版主

    快速回復

    您需要登錄后才可以回帖
    登錄 | 注冊
    高級模式

    論壇熱帖

    在線客服 快速回復 返回頂部 返回列表
    成人短片线上看