如何用PIC的普通I/O口产生时钟信号?

2020-02-08 09:16发布

请问如何用PIC的普通I/O口产生时钟信号?是通过编程产生一系列01信号还是普通IO口能够自行产生时钟信号?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
millwood0
1楼-- · 2020-02-09 15:32
this works on a different pic24f chip but they are highly alike.
  1. //reset the tmr
  2. void tmr23_init(void) {
  3.         //_T2MD = 0;                                                        //enable power to tmr
  4.         _T2ON = 0;                                                        //turn off rtc1
  5.         TMR2 = TMR3 = 0;                                        //reset the timer/counter
  6.         //PR2=period;                                                        //minimum rtc resolution is 1ms
  7.         _T2CS = 0;                                                        //use internal clock = Fosc / 4
  8.         _T2_32 = 1;                                                        //clock as 1 32-bit timer/counter
  9.         _T2CKPS=0;                                                        //set prescaler to 1:1
  10.         _T2GE = 0;                                                        //rtc1 gate disabled
  11.         _T3IF = 0;                                                        //reset the flag
  12.         _T3IE = 0;                                                        //rtc1 interrupt off
  13.         //_T2ON = 1;                                                        //turn on rtc1
  14. }

  15. //delay some time
  16. void tmr23_delay(unsigned long ps) {
  17.         _T2ON = 0;
  18.         _T3IF = 0;
  19.         PR2 = ps;                                                        //load the period, lsb
  20.         PR3 = ps >> 16;                                                //load the period, msb
  21.         _T2ON = 1;                                                        //turn on the timer
  22.         while (_T3IF==0) continue;                        //wait for the cycle to complete
  23.         //_T2ON = 0;                                                        //turn off the timer
  24. }

  25. int main(void) {
  26.         mcu_init();                                                        //reset the mcu
  27.         tmr23_init();                                                        //reset the tmr
  28.         while (1) {
  29.                 tmr23_delay(F_CPU/4);                        //wait for 1/4 a second
  30.                 IO_FLP(OUT_PORT, OUT);                        //flip out
  31.         }
  32. }
复制代码it configures timer2/3 into a 32-bit timer. You can certainly repurpose it for your application, quite easily, as the basic structure is the same.
yijianhanmei90
2楼-- · 2020-02-09 18:09
millwood0 发表于 2012-4-20 20:47
this works on a different pic24f chip but they are highly alike.it configures timer2/3 into a 32-bit ...

非常感谢你的程序。不过我很想知道我的程序错在哪儿。。。。我在做调试的时候发现更改定时器的初始值(TMR1=0x00)对时钟脉冲宽度没有影响。不太清楚原因。。。。
millwood0
3楼-- · 2020-02-09 22:32
不太清楚原因。。。。


thus the need to read and understand the datasheet.
yijianhanmei90
4楼-- · 2020-02-10 00:26
 精彩回答 2  元偷偷看……

一周热门 更多>