📄 psgtech2.c
字号:
#include <18F4550.h>
#include <stdio.h>
#include <18F4550_SFR.h>
#FUSES HS,NOPROTECT,NOLVP,PUT,NOWDT,CPUDIV1,NOPBADEN,NOSTVREN
#use delay(clock = 20000000)
#BYTE RCBUF = 0X3A1
#BYTE TEMP = 0X3A2
#BYTE TXBUF = 0X3A3
#BYTE UART_STA = 0X3A4
#BIT UART_TXIF = UART_STA.7
char test_array[10] = "chandra";
char at_cmd[7][35] = { "AT+CPIN?",
"AT+CCLK=\"08/02/29,14:55:00\"",
"AT+CPMS=\"SM\"",
"AT+CMGF=1",
"AT+CNMI=2,1,0,0,0",
"AT+CSAS"
};
void io_ports_initialize(void);
void transmit_message(int i);
void gsm_asmcode(void);
void baud_interval_time(void);
void transmission(void);
void main()
{
io_ports_initialize();
transmit_message(0);
transmit_message(1);
transmit_message(2);
transmit_message(3);
transmit_message(4);
transmit_message(5);
delay_ms(1000);
}
void io_ports_initialize()
{
TRISB = 0X05; // software uart RB0 is Used as RX PIN and XXX is Used as TX PIN
RBPU = 0; // PORTB Pull-up Resistors Enabled
TRISE = 0X00;
}
void transmit_message(int i)
{
char *tx_ptr=&at_cmd[0][0];
UART_TXIF = 1;
tx_ptr = &at_cmd[i][0];
while(*tx_ptr )
{
delay_ms(25);
if(UART_TXIF == 1)
{
TXBUF = *tx_ptr;
UART_TXIF = 0;
gsm_asmcode();
tx_ptr++;
}
}
TXBUF = 13;
UART_TXIF = 0;
gsm_asmcode();
delay_ms(25);
}
void transmission()
{
int i = 0;
while(i<7)
{
TXBUF = test_array[i];
gsm_asmcode();
++i;
}
}
void gsm_asmcode()
{
#asm
outch_n:
movlw 8; THE CHARACTER HAS 8 BITS
movwf TEMP;
bcf PORTB,4; SET START-BIT TO A "SPACE"
#endasm
baud_interval_time();
#asm
outch_n1: rrcf TXBUF,F; ROTATE THE FIRST BIT INTO CARRY
btfss STATUS,0; TEST THE CARRY BIT
bcf PORTB,4; IF BIT IS 0 SET OUTPUT PIN TO A "0" (SPACE)
btfsc STATUS,0 ; TEST THE CARRY BIT AGAIN
bsf PORTB,4; IF BIT IS 1 SET OUTPUT PIN TO A "1" (MARK)
#endasm
baud_interval_time();
#asm
decfsz TEMP,F; IF COUNT IS ZERO THEN XMIT A STOP BIT
goto outch_n1; ...ELSE XMIT NEXT BIT
rrcf TXBUF,F; ROTATE CARRY, GET THE MSB BACK INTO BIT 7
bsf PORTB,4; SET PIN TO A 1 (A "MARK") FOR THE STOP BIT
#endasm
baud_interval_time();
TXBUF = 0X00;
UART_TXIF = 1;
}
void baud_interval_time()
{
delay_us(101); // baudrate interval time(it should be 3 micro secs less than actual interval time )
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -