单片机 这样写有错吗,为什么P1的值有问题? 单片机p1怎么定义
显示P1故障代码怎么解决
一、 显示P1是是由于空调供电电压过高或者过低导致空调报故障。故障在室外电控、PFC模块、变频模块。
二、检修步骤:
1、查故障代码确定此机显示P1是电压过高或过低保护。上门测量用户电源电压,待机状态为225V,满足变频空调运行要求。
2、用万用表检测室外机L、N接线端子,室内主板有225V电压输出,当测量模块P、N直流300V输入端时发现直流母线电压不稳定,经监测模块P、N电压反复的由300V慢慢下降,当降到低于113V时,整机报P1电压过高或过低保护,最后模块P、N电压为0V。过几分钟后,模块P、N又有300V直流输入电压。
3、根据此现象,初步判定故障点在室外主电源供电线路,经进一步测试发现室外主电源继电器无吸合,输入端有220V输入,输出端无220V电压,且旁边的PTC热敏电阻发热严重,测量继电器绕组阻值为无穷大,线圈开路。
4、将接在主继电器的端子接在另外一端,机器运行稳定,制冷效果很好,当恢复此继电器接线端子为正常安装状态试机时,故障再现,故确定故障点是外机电控板上的主继电器不良。
单片机编程问题: P1=P1 | 0XF0;//声明高四位输入。 请问这里的 | 是什么意思?求讲解!
| 是 或 运算符 按位或的 0|0=0 0|1=1 1|1=1
或运算就是 只要就有一个为1 结果就为1
与之相对应的是 与 运算 &
与运算只要有一个为0 结果就为0 0&0=0 0&1= 0 1&1=1
P1|0xf0 就是把 P1的高4位都置为1 0xf0 二进制就是 11110000 高4位都是1 所以或运算后 高4位就变成了1 ,低4位因为是0 所以不会对P1低4位原有的值改动。
单片机程序中sbit p1_1=P1^0是什么意思?
#include<reg52.h>
sbit p1_1=P1^0;
unsigned int a ;
void main()
{while(1)
{
a=51000;
p1_1=0;
while(a--);a=51000;while(a--);
p1_1=1;
a=51000; while(a--);a=51000; while(a--); }
}
sbit是位定义,sbit p1_1=P1^0;是为把P1.0这一位定义成p1_1(相当于一个标识符),在main函数中的p1_1=0; 相当于P1.0=0 ,即P1.0输出低电平。
在函数中不允许对P0~P3口进行为位操作的,故使用前要先进行位定义。
又如:
#include<reg52.h>
sbit led=P1^0;
unsigned int a ;
void main()
{while(1)
{
a=51000;
led=0;
while(a--);a=51000;while(a--);
led=1;
a=51000; while(a--);a=51000; while(a--); }
}
与你上面的程序一样的效果!
如有不清楚欢迎追问!
单片机指令正误判断
11、MOV C ,#30H 错,C是位,只能用SETB C 或CLR C
12、MOV R7 , #0F0H 对
13、MOV P1 , #0EFH 对,相当于MOV direct,#data
14、 MOV B ,#0F0H 对,B就相当于是direct
15、 MOV 90H ,#0EFH 对,相当于MOV direct,#data
16、MOV @R3 ,#0F0H 错,间址只能用R0和R1
17、MOV R8 , #0F0H 对
18、MOV 0C3H , 00H 对,相当于MOV direct2,direct1