ATmegal28的所有I/O和外设都被放置在I/O空间,如图2—9所示。所有的I/O地址都可以通过LD/LDS/LDD和ST/STS/STD指令来访问,在3 2个通用工作寄存器和I/O之间传输数据。地址为$00.---$1 F的I/O寄存器还可用SBl和CBl指令直接进行位寻址.而SBIS和SBIC则用来检查单个位是否置位。当使用IN和OUT指令时,地址必须在$00~$3F之间。如果要像SRAM一样,通过LD和ST指令访问I/O寄存器,则相应的地址要加上$20。ATmegal28是一个复杂的微处理器,其支持的外设要比预留的64个I/0(通过IN/OUT指令访问)所能支持的要多。对于扩展的I/O空间$60~$FF,只能使用Sq、/STS/STD和I.D/I—DS/LDD指令。当ATmegal28工作于ATmegal03兼容模式时,扩展的I/()被SRAM所取代。为了与后续产品兼容,保留未用的位应写“0",而保留的]/o寄存器则不应进行写操作。一些状态标志位的清除是通过写“l"来实现的。CBl和SBl指令可以操作l/()寄存器所有的位,并给I/O寄存器置位的位进行写“1”操作,因此会清除这些标志位。CBl和SBl指令只对$00~$1F范围的寄存器有效。
电子街推荐阅读: