51单片机置1是输入状态,--也是输出状态,但是也可以输入。是呈现高阻态的,就是I/O口内部结构的开关是断开的,不接地,--P0 口,确实是这样的。但还接一个上拉电阻吧!(都带上拉电阻)。
创新互联公司是网站建设技术企业,为成都企业提供专业的网站设计制作、网站制作,网站设计,网站制作,网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制适合企业的网站。10余年品质,值得信赖!
你定义的color是指针变量,而你把它当位变量用了。如果color是指针,就只能传递地址,不能传递数值。而P1^1P和1^2里是数值(位值);把这句:bit *Color; //指向这两个IO口的指针 改成:bit Color;试一试。
这么简单的程序,想出问题也有点难吧。你先用万用表测一下IO引脚与GND间的电压吧,确认硬件没问题,程序确实被执行了。你也可以直接把LED接到VCC和GND,检测一下LED是否坏了。
二,如果你的发光二极管是高电平驱动亮,则P0口输出10000000时,发光管会亮 但是这个1000000值不是你加载头文件得到的值,是在程序赋值得到的。
1、有个思路,考虑用位结构体,把位变量集中到一个结构中,再通过结构体赋值。
2、每个管脚属于哪个并行口的,不是自己定义的,而是由单片机自身决定的,用户是改变不了,是不可能自己定义什么的。不同的i/o口的管脚,是不可能定义成一个io口的。
3、你有两种方法可以达到这个目的,一种是用定义宏的方式,另外一种就是写一个赋值函数。我个人建议用函数的方法,宏容易出错误。
4、不能。不过你可以写一小段赋值语句 ,设立一个变量,每次修改该变量值后,对应的赋值到这五个IO口。
5、用序号0~7,可以对一个 8 位的 IO 口,随意操作。
“51单片机的外部RAM和I\O口是统一编址”:这句话好像不对吧,应该是内部RAM。51单片机中的IO口结构上说起来比较复杂,最好详细了解一下其结构原理。
具体的汇编语言程序如下:MOV DPTR, #4000H MOVX A, @DPTR 这两行,可以对片外的地址 4000H,进行读出。在这个地址,安装的,无论是 RAM 芯片,还是 I/O 接口芯片,都可以用这两条指令,读出来。
扩展方法:CS-51单片机的I/O端口通常需要扩充,以便和更多的外设(例如显示器、键盘)进行联系。
外部扩展的IO端口地址范围可以是0000H~FFFFH或00H~FFH,访问指令有两种,跟访问外部数据存储器RAM一样:MOVX A,@DPTR 16位地址。MOVX A,@R0 8位地址。