写两片单片机利用串行口进行串行通信:串行通信的波特率可设定,可选的波特率为1200、2400、4800和9600bit/s。串行口工作方式为方式1,最好采用11.0592MHz的晶振。 (1)甲机发送字符“T”,控制乙机的LED1闪烁3次; (2)甲机发送字符“S”,控制乙机的LED2闪烁6次; (3)甲机发送字符“A”,控制乙机的LED1和LED2交替闪烁6次;
时间: 2023-05-15 09:04:56 浏览: 91
答案:
以下是两片单片机利用串行口进行串行通信的代码:
甲机代码:
#include <reg52.h>
#define FOSC 11059200L
#define BAUD 9600
#define TIMER_1MS (65536-FOSC/12/1000)
sbit LED1 = P1^0;
sbit LED2 = P1^1;
void init_serial() {
SCON = 0x50;
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = TL1 = -(FOSC/12/BAUD);
TR1 = 1;
}
void send_char(char c) {
SBUF = c;
while(!TI);
TI = 0;
}
void send_str(char *s) {
while(*s) {
send_char(*s++);
}
}
void main() {
init_serial();
while(1) {
send_char('T');
LED1 = 0;
for(int i=0; i<3; i++) {
LED1 = ~LED1;
for(int j=0; j<10000; j++);
}
send_char('S');
LED2 = 0;
for(int i=0; i<6; i++) {
LED2 = ~LED2;
for(int j=0; j<10000; j++);
}
send_char('A');
LED1 = LED2 = 0;
for(int i=0; i<6; i++) {
LED1 = ~LED1;
LED2 = ~LED2;
for(int j=0; j<10000; j++);
}
}
}
乙机代码:
#include <reg52.h>
#define FOSC 11059200L
#define BAUD 9600
#define TIMER_1MS (65536-FOSC/12/1000)
sbit LED1 = P1^0;
sbit LED2 = P1^1;
void init_serial() {
SCON = 0x50;
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = TL1 = -(FOSC/12/BAUD);
TR1 = 1;
}
char recv_char() {
while(!RI);
RI = 0;
return SBUF;
}
void main() {
init_serial();
while(1) {
char c = recv_char();
if(c == 'T') {
LED1 = 0;
for(int i=0; i<3; i++) {
LED1 = ~LED1;
for(int j=0; j<10000; j++);
}
} else if(c == 'S') {
LED2 = 0;
for(int i=0; i<6; i++) {
LED2 = ~LED2;
for(int j=0; j<10000; j++);
}
} else if(c == 'A') {
LED1 = LED2 = 0;
for(int i=0; i<6; i++) {
LED1 = ~LED1;
LED2 = ~LED2;
for(int j=0; j<10000; j++);
}
}
}
}
关于lua closure factory的完整代码,可以参考以下示例:
function make_counter()
local count = 0
return function()
count = count + 1
return count
end
end
local counter1 = make_counter()
local counter2 = make_counter()
print(counter1()) -- 1
print(counter1()) -- 2
print(counter2()) -- 1
print(counter1()) -- 3
print(counter2()) -- 2
至于中文加密的问题,可以使用一些加密算法,比如AES、DES等,但具体实现需要根据具体需求进行选择和编写,这里就不提供代码了。
阅读全文