急!C51单片机I/O口默认高电平问题!!! 51(stc89C52)单片机,用io口判断外部高低电平时i...

作者&投稿:产骅 (若有异议请与网页底部的电邮联系)
sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0 指的是端口寄存器的地址,并不是端口初始值。

二,如果你的发光二极管是高电平驱动亮,则P0口输出10000000时,发光管会亮
但是这个1000000值不是你加载头文件得到的值,是在程序赋值得到的。

补充回答:
你可以写一个简单的程序,不对端口做任何操作,然后你测量端口电压;

如果端口接有LED,而且是高电平驱动的,可以观察LED是否亮,但最好还是测量电压

不是,sfr是c51特有的关键字,意思是声明定义特殊寄存器,比如 sfr P0 = 0x80; 这条语句里面的0x80是单片机内部RAM地址,这个地址就是单片机P0口的映射在内部RAM中的地址。用sfr把0x80定义成P0的好处是方便程序编写。如果你不用这条语句又想改变P0口状态,就用指针,*( (volatile unsigned char *)0x80 ) = data;

单片机上电复位IO口都是默认高电平 11111111 ,就是默认IO置为输入口。

二极管是否会亮看要你规定的点亮方式是高电平导通还是低电平导通了。

第一个问题:0x80,0x90,0xa0,0xb0,这是单片机的物理绝对地址,这个地址的功能就是让用户可以对端口进行读写,记住是地址,所说的上电默认是0x80里面存储的值,默认上电后0x80里面存的是0xff

第二个问题:二极管如果高电平亮的话,全亮,还是上面的问题,(*(0x80))=0xff;

的确是高电平,但不能点亮灯,因为各个口的驱动能力有限除非在端口上接上拉电阻,一般都采用灌电流的方法,既单片机的端口接发光管的负极,然后经过限流电阻接在电源上。把I/O口植低电平

不是这样理解的,sfrP0=0x80,这一个0x80是它的一个端口,单片机上电时,个I/O口的电平为高电平

单片机io口输出默认是高电平吗~

单片机复位之后,所有IO口都是“1”状态,也就是“高电平”

先从软件上讲,要判断IO口高低电平,这对于单片机来说是输入状态,所以要将IO口设置为输入状态;再从硬件上讲,电路有很多种,比较保险的作法是采用三级管方式,IO口接到三极管集电极并上拉电压,外部电平就通过电阻搭配接到三极管的基极

c51单片机中断程序中的interrupt1,2,3是由什么决定的?
答:由中断号决定,一般计数器0是interrupt 0,定时器0是interrupt 1,接下来是计数器1,再是定时器1,再是串口,有些单片机还会有ADC,串口2,PCI等中断,具体看单片机的资料。Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表...

C51单片机如何通过按钮进行切换,例如一开始点阵上显示心形,按一下按...
答:方法很简单,sbit k=P1^0;//选取一个I/O端口连接一个按键 unsigned char r;//设置一个计数变量 void delay(uchar p)//12MHz@p微秒延时函数 { unsigned char i,j;for(i=0;i<p;i++){ for(j=0;j<50;j++){;}} } void key()//按键函数 { if (k==0)//查询按键是否按下 { d...

用C51编程访问MCS-51单片机的并行I/O端口时,可按什么寻址操作和什么操作...
答:访问并行IO口,按直接寻址方式访问,比如 MOV P1,#0AAH

跪求单片机c51用汇编语言写的程序,功能为:8只发光二极管依次点亮,从...
答:include<iostream> include <intrins.h> unsigned int i;void delay_nms(unsigned int n) //延时n ms { n=n+1;while(--n)delay_nus(900); //延时 1ms,同时进行补偿 } void main(){ unsigned int i;while(1){ for(i=8;i>0;i--){ if(i==8)P1=~0x01;//P1_0所接二极管...

c51单片机c语言交通灯的程序
答:Proteus仿真原理图:程序如下:include <reg51.h> define uchar unsigned char define uint unsigned int uchar data buf[4];uchar data sec_dx=20;//东西数默认 uchar data sec_nb=30;//南北默认值 uchar data set_timedx=20;uchar data set_timenb=30;int n;uchar data b;//定时器中断...

单片机C51编程两个问题(里面详细,欢迎高手)
答:12个晶振周期为一个机器周期,在单片机里面的指令都以机器周期来计算的,所以要乘以12,至于那个2^16-计数初值那就是定时器的溢出计算式,也就是从计数初值到溢出所占用的机器周期来计算的!~那个延时的问题,我看有问题。也不知道你用的是多少的晶振。不过大致的计算式是:震荡周期*12*125*500=延时...

求c51单片机电子钟程序(c语言)
答:uchar i;D_SCL = 0;for (i=8;i>=1;i--){ D_SDA = out&0x80; //送数据到数据口 D_SCL = 1; //时钟线置1 D_SCL = 0; //送一时钟 out<<=1; //左移 } } //=== 写命令函数 === void lcd_wcmd(uchar cmd){ LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;sen...

51单片机中 什么i变量能定义两次?我给你看个例子 led流水灯
答:这两次所用的变量 i 都是局部变量,一个是在延时函数void delay(u16 i)中作形参,当这个延时函数调用完了,这个变量就取消了。而第二次用是在主程序中,也是局部变量,只在主程序中起作用,对其它无影响。如果这个变量 i 是在主程序和子函数以外定义的,就是全局变量了,那两次使用会互相影响了...

c51单片机程序实例
答:led[]={1,2,3,4};void dealdat(uchar a){led[0]=0;led[1]=0;led[2]=0;led[3]=0;led[a]=disk;}void delay(unsigned int a){unsigned int i,j;for(i=0;i<a;i++)for(j=0;j<1000;j++);}void t0isr() interrupt 1{TH0=(65536-5000)/256;TL0=(65536-5000)%256;...

用c51单片机控制一个闪光灯循环闪光5次以后熄灭不再闪光,用C语言编程...
答:***/ Voiddelay(Void)//Void表示没有返回值,也没有传递参数。{ Unsignedint我;定义一个最大值为65535的无符号整数。For (I = 0;我< 20000;i++) //执行20000个空循环。;//什么也不做,等待一个机器周期。} /*** 函数函数:主函数(C语言规则必须有且只能有一个主函数)...