avr问题求助,atmega128 pwm程序,PE3口没有输出波形,代码如下

avr问题求助,atmega128 pwm程序,PE3口没有输出波形,代码如下,第1张

我举个例子,设置定时器3的3个通道都输出PWM,即PE3、PE4、PE5,单片机频率嫌誉弯7.3728MHz,分频的工作频率虚谈是7.2KHz,PWM周期是7200/72=100Hz,输出的3路PWM都是47.2%:

PORTE=0x00

DDRE=0x38

// Timer/Counter 3 initialization

// Clock source: System Clock

// Clock value: 7.200 kHz

// Mode: Fast PWM top=ICR3

// OC3A output: Non-Inv.

// OC3B output: Non-Inv.

// OC3C output: Non-Inv.

// Noise Canceler: Off

// Input Capture on 芹闷Falling Edge

// Timer3 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

// Compare C Match Interrupt: Off

TCCR3A=0xAA

TCCR3B=0x1D

TCNT3H=0x00

TCNT3L=0x00

ICR3H=0x00

ICR3L=0x47

OCR3AH=0x00

OCR3AL=0x22

OCR3BH=0x00

OCR3BL=0x22

OCR3CH=0x00

OCR3CL=0x22

从根本上来说,如果你使用UART1,就不要同时使用PD3和PD2做GPIO用,如果非要复用的话,也要确保它们不同时生嫌好效,但你上面的程序显然不是这样。像你上面这样连接的话,即便修正了你的程序串口能够收到数据,但PD3和PD2的方向和高低也是由UART1控制,而非你所控制;也就是说显示不正确!

其次,要恢复PD3和PD2的GPIO功能是禁用UART1,而不是关闭全局中断!

再次,超级循环体中反复开关全局中断,而你的串口接收又是中断驱动的,当然接收不正常!

要纠正,这样:

1. 使谈激用PORTD以外的端口连接LED,或者使用UART1之外的串口收发含者袜数据

2. 串口接收中断中收到有效数据置位标志

3. 超级循环体判断上述标志,如置位则:发送到PORTx,清零标志

4. 无需反复开关全局中断

又看了一下,貌似LED在PORTE上面,这样的话和PORTD的IO功能就没什么关系了吧。

删除超级循环体上的全局中断开关代码应该可以运行,但还是建议按前述流程 *** 作,这样利用中断规范些!

一句谢谢没有,一分没有,最后还来个“缓滑庆即可”,高,实在是高!

你的级别也是四级了,你在知道里,愿意帮助向自己这样的人吗?

我这个回答肯定降低我的采纳率了,让誉没关系,提扰握醒下你。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12564564.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存