序:
以前一直用的是STC51 + 飞思卡尔xs128组合,简单的就用51写,复杂的用xs128,对于AVR、PIC、STM系列是只闻其声,不见其人。 最近因为要做飞思卡尔电磁磁场发生器而开始第一次接触AVR,顿有相见恨晚之感。
简单点说,有内部上拉电阻,引脚30ma的拉电流和灌电流,内部硬件PWM和ADC等,而且价格也不贵,我正式决定用atmege8代替51。
对端口操作:
AVR端口是真正的双向端口,不像51伪双向。这也是AVR的一项优势,只是操作时大家注意DDRn就可以了。真正双向端口在模拟时序方面不如伪双向的方便。
DDRn PORTn PINn 解释:n为端口号:ABCDE
DDRn:控制端口是输入还是输出,0为输入,1为输出。个人记忆方法:一比零大所以往外挤,即1为输出,0为输入。
PORTn:从引脚输出信号,当DDRn为1时,可以通过PORTn=x等端口操作语句给引脚输出赋值。
PINn:从引脚读输入信号,无论DDRn为何值,都可以通过x=PINn获得端口n的外部电平。
DDxn PORTxn PUD (in SFIOR) I/O 上拉电阻 说明
0 0 X 输入 No 高阻态 (Hi-Z)
0 1 0 输入 Yes 被外部电路拉低时将输出电流
0 1 1 输入 No 高阻态(Hi-Z)
1 0 X 输出 No 输出低电平 ( 漏电流)
1 1 X 输出 No 输出高电平 ( 拉电流)