T
tagabukid
Guest
Mahal na lahat,
Ako ay gumagamit ng input makunan ng dsPIC30F3011 para sa pagkalkula ng mga pulse width ng isang parisukat na alon.Ako gamit ang mga sumusunod na code:
Code:
hindi linagdaan int rotateCount = 0;
hindi linagdaan int timePeriod = 0; current_value = 0, previous_value = 0;magpawalang-bisa InitIC (walang laman)
(
IC7CONbits.ICM = 3; / / makunan bawat pagsikat gilid
IC7CONbits.ICBNE = 0; / / Input makunan buffer ay walang laman
IC7CONbits.ICOV = 0; / / Walang input makunan overflow nangyari
IC7CONbits.ICI = 0; / / tumakip sa bawat makunan kaganapan
IC7CONbits.ICTMR = 1; / / TMR2 nilalaman ay nakuha sa nakunan kaganapan
IC7CONbits.ICSIDL = 0; / / Input makunan module ay patuloy na tatakbo sa CPU Idle modeIFS1bits.IC7IF = 0; / / makatakip bit ay nalilimas
IPC4bits.IC7IP = 3; / / Itakda ang makatakip prayoridad sa 3
IEC1bits.IC7IE = 1; / / Itakda ang IC7 makatakip paganahin ang bit
)magpawalang-bisa TMR2_setup (walang laman)
(
TMR2 = 0x00; / / I-clear ang mga nilalaman ng timer magrehistro
T2CONbits.TCS = 1; / / timer ay gumagamit ng mga panloob na orasan kapag TCS = 0.
Paggamit ng Internal Clock (Fosc / 4)
T2CONbits.T32 = 0; / / TMRx at TMRy form ng isang 16-bit timer
T2CONbits.TCKPS = 0; / / Paggamit 1:1 prescale halaga
T2CONbits.TGATE = 0; / / timer Gate akumulasyon Nahinto
T2CONbits.TSIDL = 0; / / Magpatuloy sa Idle Mode
T2CONbits.TON = 1; / / Simulan Timer1 sa prescaler settings sa 1:1 at
/ / Orasan source maitakda sa mga panloob na pag-ikot
PR2 = 0xFFFF; / / load ang Panahon ng rehistro sa halaga 0xFFFF
bumalik;
)magpawalang-bisa __attribute__ ((makatakip, no_auto_psv)) _IC7Interrupt (walang laman)
(
rotateCount = rotateCount 1;kung (rotateCount == 6)
(
previous_value = current_value;
current_value = IC7BUF;
kung (current_value> previous_value)
(
timePeriod = current_value-previous_value;
)
kung hindi
(
timePeriod = (PR2 - previous_value) current_value;
)SendData (timePeriod); / / pagpapadala ng oras ng panahon na ang host ng PC
rotateCount = 0;
)
IFS1bits.IC7IF = 0; / / makatakip bit ay nalilimas
)
Ako ay gumagamit ng input makunan ng dsPIC30F3011 para sa pagkalkula ng mga pulse width ng isang parisukat na alon.Ako gamit ang mga sumusunod na code:
Code:
hindi linagdaan int rotateCount = 0;
hindi linagdaan int timePeriod = 0; current_value = 0, previous_value = 0;magpawalang-bisa InitIC (walang laman)
(
IC7CONbits.ICM = 3; / / makunan bawat pagsikat gilid
IC7CONbits.ICBNE = 0; / / Input makunan buffer ay walang laman
IC7CONbits.ICOV = 0; / / Walang input makunan overflow nangyari
IC7CONbits.ICI = 0; / / tumakip sa bawat makunan kaganapan
IC7CONbits.ICTMR = 1; / / TMR2 nilalaman ay nakuha sa nakunan kaganapan
IC7CONbits.ICSIDL = 0; / / Input makunan module ay patuloy na tatakbo sa CPU Idle modeIFS1bits.IC7IF = 0; / / makatakip bit ay nalilimas
IPC4bits.IC7IP = 3; / / Itakda ang makatakip prayoridad sa 3
IEC1bits.IC7IE = 1; / / Itakda ang IC7 makatakip paganahin ang bit
)magpawalang-bisa TMR2_setup (walang laman)
(
TMR2 = 0x00; / / I-clear ang mga nilalaman ng timer magrehistro
T2CONbits.TCS = 1; / / timer ay gumagamit ng mga panloob na orasan kapag TCS = 0.
Paggamit ng Internal Clock (Fosc / 4)
T2CONbits.T32 = 0; / / TMRx at TMRy form ng isang 16-bit timer
T2CONbits.TCKPS = 0; / / Paggamit 1:1 prescale halaga
T2CONbits.TGATE = 0; / / timer Gate akumulasyon Nahinto
T2CONbits.TSIDL = 0; / / Magpatuloy sa Idle Mode
T2CONbits.TON = 1; / / Simulan Timer1 sa prescaler settings sa 1:1 at
/ / Orasan source maitakda sa mga panloob na pag-ikot
PR2 = 0xFFFF; / / load ang Panahon ng rehistro sa halaga 0xFFFF
bumalik;
)magpawalang-bisa __attribute__ ((makatakip, no_auto_psv)) _IC7Interrupt (walang laman)
(
rotateCount = rotateCount 1;kung (rotateCount == 6)
(
previous_value = current_value;
current_value = IC7BUF;
kung (current_value> previous_value)
(
timePeriod = current_value-previous_value;
)
kung hindi
(
timePeriod = (PR2 - previous_value) current_value;
)SendData (timePeriod); / / pagpapadala ng oras ng panahon na ang host ng PC
rotateCount = 0;
)
IFS1bits.IC7IF = 0; / / makatakip bit ay nalilimas
)