本帖最后由 lyjian 于 2021-5-21 18:23 编辑
上面几位回答“会的”都没有看清楚楼主的问题。
楼主的问题是“对于端口的位操作都是读改写,那么有可能主程序中操作PA0有可能被中断打断,这样不是会造成端口实际输出是混乱的?”
看重点“有可能主程序中操作PA0有可能被中断打断”。
显然这是没有可能出现的,因为所有MCU都会在执行完当前指令后才会去响应中断,所以不可能出现主程序操作端口到半路后被中断截胡去操作端口这种情况。
那为何有时端口会莫名其妙变了(各位口中的端口混乱?)?这就和读-修改-写指令相关。
有些MCU,读-修改-写指令读的是读端口实际状态。假如某个端口的PA0做输入,PA1做输出,PA0\PA1的输出寄存器都置了1,PA0\PA1都被外面的电路拉到了低电平,这时对PA端口执行读-修改-写指令,PA0\PA1会读回0电平,然后被CPU把0写回PA0\PA1的输出寄存器(与之前的设置相反了),PA1这时变成了输出0电平(原先要求是输出高电平的,出现了混乱)。PA0因为是输入,输出寄存器的值变化没有影响,但后面软件把PA0设成了输出,那就受影响了,怎么输出了低电平?原先软件只设了1呀,怎么出现了混乱?
51不会出现这种问题,因为51的读-修改-写指令读的是寄存器不是端口;PIC会出现这种问题,因为PIC的读-修改-写指令读的是端口。
|