本帖最后由 helper197 于 2011-7-31 02:18 编辑
您好
我使用 W77E058A 的单片机,但遇到一个问题是
Keil 4 上面都可以正确的模拟,不过放到硬件上
Uart 1 总是没有输出? Uart0 则是很正常
Sensor <sp485c < Uart 0 < W77E058a < Uart 1 < sp485c < PC
硬件的接线, uart1 除了 rx/tx都接到 sipexsp485c 上,
控制线 由 ww7e058a P1_0 拉出来接到 sp485c 的De
- /*--------------------------------------------------------------------------
- W77C32.H
-
- Headerfile for Winbond W77C32, W77L32, W77C58, W77E58, W77LE58
- Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc.
- All rights reserved.
-
- --------------------------------------------------------------------------*/
-
- /* BYTE Registers */
- sfr P0 = 0x80;
- sbit P0_0 = P0^0;
- sbit P0_1 = P0^1;
- sfr P1 = 0x90;
- sfr P2 = 0xA0;
- sfr P3 = 0xB0;
- sfr PSW = 0xD0;
- sfr ACC = 0xE0;
- sfr B = 0xF0;
- sfr SP = 0x81;
- sfr DPL = 0x82;
- sfr DPH = 0x83;
- sfr PCON = 0x87;
- sfr TCON = 0x88;
- sfr TMOD = 0x89;
- sfr TL0 = 0x8A;
- sfr TL1 = 0x8B;
- sfr TH0 = 0x8C;
- sfr TH1 = 0x8D;
- sfr IE = 0xA8;
- sfr IP = 0xB8;
- sfr SCON = 0x98;
- sfr SBUF = 0x99;
- sfr SCON0 = 0x98;
- sfr SBUF0 = 0x99;
-
- /* W77C32, W77C58 Extensions */
- sfr DPL1 = 0x84;
- sfr DPH1 = 0x85;
- sfr DPS = 0x86;
- sfr CKCON = 0x8E;
- sfr EXIF = 0x91;
- sfr P4 = 0xA5;
- sfr SADDR = 0xA9;
- sfr SADDR1 = 0xAA;
- sfr SADEN0 = 0xB9;
- sfr SADEN1 = 0xBA;
- sfr SCON1 = 0xC0;
- sfr SBUF1 = 0xC1;
- sfr ROMMAP = 0xC2;
- sfr PMR = 0xC4;
- sfr STATUS = 0xC5;
- sfr TA = 0xC7;
- sfr T2CON = 0xC8;
- sfr T2MOD = 0xC9;
- sfr RCAP2L = 0xCA;
- sfr RCAP2H = 0xCB;
- sfr TL2 = 0xCC;
- sfr TH2 = 0xCD;
- sfr WDCON = 0xD8;
- sfr EIE = 0xE8;
- sfr EIP = 0xF8;
-
- /* BIT Registers */
- /* PSW */
- sbit CY = PSW^7;
- sbit AC = PSW^6;
- sbit F0 = PSW^5;
- sbit RS1 = PSW^4;
- sbit RS0 = PSW^3;
- sbit OV = PSW^2;
- sbit FL = PSW^1;
- sbit P = PSW^0;
-
- /* TCON */
- sbit TF1 = TCON^7;
- sbit TR1 = TCON^6;
- sbit TF0 = TCON^5;
- sbit TR0 = TCON^4;
- sbit IE1 = TCON^3;
- sbit IT1 = TCON^2;
- sbit IE0 = TCON^1;
- sbit IT0 = TCON^0;
-
- /* IE */
- sbit EA = IE^7;
- sbit ES1 = IE^6;
- sbit ET2 = IE^5;
- sbit ES0 = IE^4;
- sbit ET1 = IE^3;
- sbit EX1 = IE^2;
- sbit ET0 = IE^1;
- sbit EX0 = IE^0;
-
- /* IP */
- sbit PS1 = IP^6;
- sbit PT2 = IP^5;
- sbit PS0 = IP^4;
- sbit PT1 = IP^3;
- sbit PX1 = IP^2;
- sbit PT0 = IP^1;
- sbit PX0 = IP^0;
-
- /* P1 */
- sbit INT5 = P1^7;
- sbit INT4 = P1^6;
- sbit INT3 = P1^5;
- sbit INT2 = P1^4;
- sbit TXD1 = P1^3;
- sbit RXD1 = P1^2;
- sbit T2EX = P1^1;
- sbit T2 = P1^0;
-
- /* P3 */
- sbit RD = P3^7;
- sbit WR = P3^6;
- sbit T1 = P3^5;
- sbit T0 = P3^4;
- sbit INT1 = P3^3;
- sbit INT0 = P3^2;
- sbit TXD0 = P3^1;
- sbit RXD0 = P3^0;
-
- /* SCON0 */
- sbit SM0 = SCON0^7; /* alternative SM0_FE_0 */
- sbit SM1 = SCON0^6; /* alternative SM1_0 */
- sbit SM2 = SCON0^5; /* alternative SM2_0 */
- sbit REN = SCON0^4; /* alternative REN_0 */
- sbit TB8 = SCON0^3; /* alternative TB8_0 */
- sbit RB8 = SCON0^2; /* alternative RB8_0 */
- sbit TI = SCON0^1; /* alternative TI_0 */
- sbit RI = SCON0^0; /* alternative RI_0 */
-
- /* SCON1 */
- sbit SM01 = SCON1^7; /* alternative SM0_FE_1 */
- sbit SM11 = SCON1^6; /* alternative SM1_1 */
- sbit SM21 = SCON1^5; /* alternative SM2_1 */
- sbit REN1 = SCON1^4; /* alternative REN_1 */
- sbit TB81 = SCON1^3; /* alternative TB8_1 */
- sbit RB81 = SCON1^2; /* alternative RB8_1 */
- sbit TI1 = SCON1^1; /* alternative TI_1 */
- sbit RI1 = SCON1^0; /* alternative RI_1 */
-
- /* T2CON */
- sbit TF2 = T2CON^7;
- sbit EXF2 = T2CON^6;
- sbit RCLK = T2CON^5;
- sbit TCLK = T2CON^4;
- sbit EXEN2 = T2CON^3;
- sbit TR2 = T2CON^2;
- sbit C_T2 = T2CON^1;
- sbit CP_RL2 = T2CON^0;
-
- /* WDCON */
- sbit SMOD_1 = WDCON^7;
- sbit POR = WDCON^6;
- sbit EPFI = WDCON^5;
- sbit PFI = WDCON^4;
- sbit WDIF = WDCON^3;
- sbit WTRF = WDCON^2;
- sbit EWT = WDCON^1;
- sbit RWT = WDCON^0;
-
- /* EIE */
- sbit EWDI = EIE^4;
- sbit EX5 = EIE^3;
- sbit EX4 = EIE^2;
- sbit EX3 = EIE^1;
- sbit EX2 = EIE^0;
-
- /* EIP */
- sbit PWDI = EIP^4;
- sbit PX5 = EIP^3;
- sbit PX4 = EIP^2;
- sbit PX3 = EIP^1;
- sbit PX2 = EIP^0;
复制代码
复制代码
- #include"W77E58.h"
-
- unsigned char flag_1,flag_0;
- unsigned char a=0,b=0;
- unsigned char *sp;
- unsigned char c1[10]={0x01,0x05,0x00,0x00,0xFF,0x00,0x8C,0x3A};
- unsigned char c2[10]={0x01,0x05,0x00,0x00,0x00,0x00,0xCD,0xCA};
- unsigned char c3[10];
-
- void Delay(unsigned long int n)
- {
- unsigned char data i;
- unsigned int data j;
- j=n;
- while(j--){for(i=0;i<125;i++);}
- }
- main()
- {
-
- flag_1=1;
- flag_0=1;
- //SYSTEM init ,其中串口0用定时器2,串口1用定时器1
-
- /*******串口0定时器2**************/
-
- SCON0=0x50; //工作在模式1,接收允许
- RCLK=1;
- TCLK=1;
- CP_RL2=0;//T2CON=0x30; //用定时器2做串口0的波特率发生器
- RCAP2H=0xff; // 11.0592M晶振下,baud rate=2400
- RCAP2L=0x70;
- TH2=0xff;
- TL2=0x70;
- ES0=1;
- /********************/
- /*******串口1定时器1******/
- TMOD=0x20; //定时器1工作在模式1
- TL1=0xfd; //baud rate=9600
- TH1=0xfd;
-
- WDCON=0x00;//00:BAUDRATE*1; 80:BAUDRATE*2
- SCON1=0x58; //工作在模式1,允许接收
- ES1=1;
- TB81 = 0;
- /***********************/
- CKCON=0x01;//wait 3 cycle
- RCLK = 0;
- TCLK = 0 ;
-
-
- Delay(1500);
- RI1=0;
- TI1=0;
- Delay(500);
- EA=1;
- TR2=1;
- TR1=1;
-
- while(1)
- {
- if(flag_0==1)
- {
- TI=1;flag_0=0;
- }
- Delay(1500);
- flag_0=1;
-
- if(flag_1==1)
- {
- TI1=1;flag_1=0;
- }
- flag_1=1;
- }
- }
-
- void serial_0(void)interrupt 4 using 1
- {
- int i;
- if(RI)
- {
- flag_0=1;
- RI=0;
- }
- if(TI)
- {
- INT0 = 1;
- for(i=0;i<8;i++)
- {
- P0_0 = 0;
- TI=0;
- SBUF0=c1[i];
- while(TI==0) ;
- TI=0;
- P0_0 = 1;
- }
- INT0 = 0;
- }
- }
- void serial_1(void)interrupt 7 using 2
- {
- int i;
- if(RI1)
- {
- flag_1=1;
- RI1=0;
- }
- if(TI1)
- {
- T2 = 1;
- T2EX = 1;
-
- for(i=0;i<8;i++)
- {
- P0_1 = 0;
- TI1=0;
- SBUF1=c2[i];
- while(TI1==0) ;
- TI1=0;
- P0_1 = 1;
- Delay(1500);
- }
-
- T2EX = 0;
- T2 = 0;
- }
-
- }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我有把 uart 0 uart 1 的两个 rs485 ic 对调
一样状况 uart 0 正常 uart 1确认有发出数据却收不到
一周热门 更多>