找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2735|回復(fù): 11
收起左側(cè)

應(yīng)廣單片機(jī)邊沿中斷觸發(fā)改主程序循環(huán)執(zhí)行,求幫忙分析

[復(fù)制鏈接]
ID:835574 發(fā)表于 2022-7-8 16:40 | 顯示全部樓層 |閱讀模式
右邊為例程的,但是是邊沿觸發(fā)中斷。我這硬件的是是普通引腳沒(méi)法使用。于是改參考例子,改主程序循環(huán)。
但是解出來(lái)的值不同,求指點(diǎn)
a.jpg
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2022-7-8 23:28 | 顯示全部樓層
應(yīng)廣的沒(méi)法指導(dǎo)
一是應(yīng)廣好像都是OTP的,工作中用不到的話,幾乎沒(méi)人學(xué),燒錄器貴上天,沒(méi)法驗(yàn)證
二是應(yīng)廣用的不是標(biāo)準(zhǔn)C,迷你C估計(jì)學(xué)的人不多
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2022-7-9 17:18 | 顯示全部樓層
我也沒(méi)用過(guò)應(yīng)廣的。不會(huì)應(yīng)廣的語(yǔ)法。
我發(fā)現(xiàn)右圖代碼是有些問(wèn)題。
假設(shè)左圖的代碼正常。
假設(shè)右圖中的變量RF_LV為RF的暫存值。

  1. void main()
  2. {
  3.         while(1){
  4.                 if(RF!=RF_LV)
  5.                 {
  6.                         //RF不等于RF_LV,表示發(fā)生了跳變。
  7.                         RF_LV=RF;//RF_LV=0表示為下降沿 RF_LV=1表示為上升沿
  8.                         RF_Receive();//左圖代碼(邊沿觸發(fā)中斷的),注意把所有的RF要替換為RF_LV。                       
  9.                 }
  10.         }
  11. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:962286 發(fā)表于 2022-7-9 18:34 | 顯示全部樓層
用讀IO的方式代替用邊沿中斷,只需要讀到IO跟原來(lái)不一樣,然后執(zhí)行應(yīng)廣的例程即可:
  1. RF_RECEIVE        expand
  2.         static        Byte        Icnt;
  3.         if(RF == 0)
  4.         {
  5.                 if(RF_LV == 0)
  6.                 {
  7.                         Timer_250us = 0;
  8.                 }
  9.                 RF_LV = 1;
  10.         }
  11.         else
  12.         {
  13.                 if(RF_LV == 1)
  14.                 {
  15.                         if(RF_Start == 0)
  16.                         {
  17.                                 if((Timer_250us >= 32) && (Timer_250us <= 48))
  18.                                 {
  19.                                         RF_Start = 1;
  20.                                         Data_In = 0;
  21.                                         Icnt = 0;
  22.                                 }
  23.                         }
  24.                         else
  25.                         {
  26.                                 Icnt ++;
  27.                                 if((Timer_250us >= 3) && (Timer_250us <= 5))
  28.                                 {
  29.                                         CF = 1;
  30.                                         Data_In <<<= 1;
  31.                                 }
  32.                                 else if((Timer_250us >= 1) && (Timer_250us <= 2))
  33.                                 {
  34.                                         CF = 0;
  35.                                         Data_In <<<= 1;
  36.                                 }
  37.                                 else
  38.                                 {
  39.                                         Icnt = 0;
  40.                                         RF_Start = 0;
  41.                                 }
  42.                         }
  43.                         if(Icnt >= 24)
  44.                         {
  45.                                 Icnt = 0;
  46.                                 RF_End = 1;
  47.                                 RF_Start = 0;
  48.                                 .printf("ÂëÖμ:%03X\n",Data_In)
  49.                         }
  50.                 }
  51.                 RF_LV = 0;
  52.         }
  53. endm
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2022-7-9 22:33 | 顯示全部樓層
要留意主循環(huán)的周期要少于信號(hào)電平保持時(shí)間的1/3
如信號(hào)中低電平時(shí)間最短為250us
那么主循環(huán)時(shí)間就應(yīng)少于83us
否則會(huì)掉偵
回復(fù)

使用道具 舉報(bào)

ID:835574 發(fā)表于 2022-7-10 11:24 | 顯示全部樓層
Y_G_G 發(fā)表于 2022-7-8 23:28
應(yīng)廣的沒(méi)法指導(dǎo)
一是應(yīng)廣好像都是OTP的,工作中用不到的話,幾乎沒(méi)人學(xué),燒錄器貴上天,沒(méi)法驗(yàn)證
二是應(yīng)廣用 ...

應(yīng)廣的確實(shí)是如你所說(shuō)的這樣.。我剛剛好工作需要/.
回復(fù)

使用道具 舉報(bào)

ID:835574 發(fā)表于 2022-7-10 11:37 | 顯示全部樓層
datouyuan 發(fā)表于 2022-7-9 17:18
我也沒(méi)用過(guò)應(yīng)廣的。不會(huì)應(yīng)廣的語(yǔ)法。
我發(fā)現(xiàn)右圖代碼是有些問(wèn)題。
假設(shè)左圖的代碼正常。

看了下,發(fā)現(xiàn)搞錯(cuò)了。原諒我左右不分。尷尬
左右是示例代碼(中斷觸發(fā))。右邊是我的轉(zhuǎn)換的普通引腳的
RF_LV 我本來(lái)是用來(lái)標(biāo)志,是想讓電平剛改變時(shí)執(zhí)行一次,后面電平相同的時(shí)間不再執(zhí)行這里面的代碼.

大佬,get到我的點(diǎn)了,我改下試試先。感謝建議
回復(fù)

使用道具 舉報(bào)

ID:835574 發(fā)表于 2022-7-10 11:43 | 顯示全部樓層
MCU_FANS 發(fā)表于 2022-7-9 18:34
用讀IO的方式代替用邊沿中斷,只需要讀到IO跟原來(lái)不一樣,然后執(zhí)行應(yīng)廣的例程即可:

思路是用讀IO的值來(lái)替換,電平改變的時(shí)候執(zhí)行一次,然后開(kāi)啟計(jì)數(shù)器算時(shí)間,否則波形解出來(lái)不對(duì),然后我加了各種判斷。把我自己給繞暈了。。。
回復(fù)

使用道具 舉報(bào)

ID:835574 發(fā)表于 2022-7-10 11:50 | 顯示全部樓層
MCU_FANS 發(fā)表于 2022-7-9 18:34
用讀IO的方式代替用邊沿中斷,只需要讀到IO跟原來(lái)不一樣,然后執(zhí)行應(yīng)廣的例程即可:

因?yàn)楹瘮?shù)是在main里面循環(huán)的。如果RF=0的時(shí)候,時(shí)間有900us. 那么timer_250us 就一直清0 ,無(wú)法計(jì)算時(shí)間。和中斷觸發(fā)有差異了
回復(fù)

使用道具 舉報(bào)

ID:835574 發(fā)表于 2022-7-10 11:53 | 顯示全部樓層
lkc8210 發(fā)表于 2022-7-9 22:33
要留意主循環(huán)的周期要少于信號(hào)電平保持時(shí)間的1/3
如信號(hào)中低電平時(shí)間最短為250us
那么主循環(huán)時(shí)間就應(yīng)少于 ...

我也懷疑過(guò)是否因?yàn)橹鞒绦驁?zhí)行時(shí)間過(guò)長(zhǎng),然后導(dǎo)致時(shí)間線出錯(cuò)。然后我搞了個(gè)例子,主循環(huán)里面什么都做,就只執(zhí)行這函數(shù),然后一樣的問(wèn)題。我就懷疑是不是我判斷的條件和中斷雙邊沿觸發(fā)的對(duì)不上,而不是時(shí)間線
回復(fù)

使用道具 舉報(bào)

ID:835574 發(fā)表于 2022-7-11 09:24 | 顯示全部樓層
datouyuan 發(fā)表于 2022-7-9 17:18
我也沒(méi)用過(guò)應(yīng)廣的。不會(huì)應(yīng)廣的語(yǔ)法。
我發(fā)現(xiàn)右圖代碼是有些問(wèn)題。
假設(shè)左圖的代碼正常。

這方面實(shí)測(cè)可以了。。感謝大佬.
就是應(yīng)廣的引腳不能直接判斷,需要迂回下
        while (1)
        {
                if(RF){
                        RF_TEMP = 1;
                }else{
                        RF_TEMP = 0;
                }

                if(RF_TEMP != RF_LV){ //RF不等于RF_LV,表示發(fā)生了跳變。
                        RF_LV=RF_TEMP; //RF_LV=0表示為下降沿 RF_LV=1表示為上升沿
                        RF_Receive;
                }
        }
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2022-7-11 10:58 | 顯示全部樓層
剛仔細(xì)分析了下左圖代碼,這段代碼是用于315M433MHz無(wú)線接收模塊解碼的,代碼寫(xiě)得非常好,可適用于各種單片機(jī),值得收藏。

這段代碼同其它常見(jiàn)代碼比,占用mcu實(shí)踐極短,幾乎是0耗時(shí),非常方便的嵌入到各種項(xiàng)目中,對(duì)項(xiàng)目的其它模塊無(wú)任何影響。缺點(diǎn)是需要使用外中斷或引腳變動(dòng)中斷+定時(shí)器中斷,全局變量也多了幾個(gè)。

初學(xué)者逛論壇,應(yīng)該多收集這類優(yōu)秀代碼,并分析理解。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表