我在 python 中编写了一个程序,它通过 USART 从 Atmega32(微控制器)接收二进制数并将其打印在输出中。
另一方面,我的 Atmega32 在中断触发时读取其 PINA,并使用 USART 将其值发送到计算机。
这是我的python程序:
>>> import serial
>>> ser=serial.Serial ('COM3')
>>> ser.open()
>>> while(1):
ser.read()
当我以使00000111
(等于7)的方式连接 PINA 引脚时,我在 python 中看到以下输出:
'7'
'7'
'7'
'7'
'7'
'7'
.
.
.
但是当我以使10000111
(等于135)的方式连接 PINA 引脚时,我在 python 中看到以下输出:
'1'
'3'
'5'
'1'
'3'
'5'
'1'
'3'
'5'
'1'
'3'
'5'
'1'
'3'
'5'
'1'
'3'
'5'
.
.
.
如上所示,它在三行中打印135 !为什么?
仅供参考:这是我在 CodeVision 中为Atmega32编写的程序:
interrupt [EXT_INT0] void ext_int0_isr(void)
{
printf("%d",PINA);
}
更新:我按照答案中的建议更改了 ATMEGA 端和 Python 端中的程序:
我的 AVR 中断程序:
interrupt [EXT_INT0] void ext_int0_isr(void)
{
printf("%d",PINA);
printf("%d\n",0);
}
这是我在 python 中的输出:
>>> while(1):
ser.readline()
'35\n'
'135\n'
'135\n'
'135\n'
'135\n'
'135\n'
'135\n'
'agi\x16agi\x16\xff135255\n'
'1350\n'
'1350\n'
'1350\n'
'1350\n'
'1350\n'
'1350\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'1350\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'1350\n'
'1350\n'
'1350\n'
'1350\n'
'1350\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'1350\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'1350\n'
'1350\n'
'1350\n'
'1350\n'
'1350\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'1350\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
'135255\n'
'1350\n'
'135255\n'
如您所见,AVR 代码和 Python 代码的输出不是我们所期望的!