Nếu đây là lần đầu tiên đến với Điện Tử Việt Nam, bạn có thể đọc phần Hỏi đáp bằng cách nhấn vào liên kết. Có thể bạn cần đăng kí trước khi có thể gửi bài . Để bắt đầu xem bài viết, chọn diễn đàn bạn muốn thăm dưới đây.
Bài này hay đó...pót cả codientu.org và dientuvietnam.net cơ ak..mình mang về pót blog phát nhé..cho anh em cùng học hỏi..còn mạch mình sẽ vẽ lại làm thử xem chạy ngon không..hí hí...có chỗ DS18B20 mình thấy sao không có thêm con ADC0804 nhỉ...vì 8051 không có ADC..
dùng ds18b20 thì không cần con ADC0804.
code mở bạn tùy ý sử dụng.
Haibk91 cho mình hỏi xí,mình thấy trong file hex nó có dung lượng là lớn hơn 8k của con chip 89s52 thì làm sao mà nạp được vậy. Bạn trả lời giúp mình với.hi.
Haibk91 cho mình hỏi xí,mình thấy trong file hex nó có dung lượng là lớn hơn 8k của con chip 89s52 thì làm sao mà nạp được vậy. Bạn trả lời giúp mình với.hi.
file hex do máy tính hiển thị dung lượng khác với file hex nạp cho VDK. Nguyên nhân tại sao thì mình ko rành lắm..>khi bạn nap bằng mạch nạp, thì nó hiển thị dung lượng nạp cho rom chính xác hơn. Lúc trước, mình cũng có file nạp 23k. nhưng khi nạp vào VDK, thì chương trình nạp hiển thị dung lượng có 5K ak.
}
adate = numDateDl - ((sttAmon*59)/2); // Ngay Al
}
// chon che do -- dua du lieu ra bo dem hien thi
void chonCheDo(void)
{
if(mode == 0)
{
rtcReadTime(&hour,&min,&sec);
rtcReadDate(&date,&mon,&year);
if((hour==0)&(min==0)&(sec<3))amLich();
}
if(chedo==1)
{
ledData[0] = ma_bcd[hour/10];
ledData[1] = ma_bcd[hour%10];
ledData[2] = ma_bcd[min/10];
ledData[3] = ma_bcd[min%10];
ledData[4] = ma_bcd[sec/10];
ledData[5] = ma_bcd[sec%10];
ledData[6] = 0xFF;
ledData[7] = 0xFF;
}
if(chedo==2)
{
ledData[0] = ma_bcd[date/10];
ledData[1] = ma_bcd[date%10];
ledData[2] = ma_bcd[mon/10];
ledData[3] = ma_bcd[mon%10];
ledData[4] = ma_bcd[2];
ledData[5] = ma_bcd[0];
ledData[6] = ma_bcd[year/10];
ledData[7] = ma_bcd[year%10];
}
if(chedo==3)
{
tempx = readAdc()/2;
ledData[0] = ma_bcd[adate/10];
ledData[1] = ma_bcd[adate%10];
ledData[2] = ma_bcd[amon/10];
ledData[3] = ma_bcd[amon%10];
ledData[4] = ma_bcd[temp/10];
ledData[5] = ma_bcd[temp%10];
ledData[6] = 0x9c; // o
ledData[7] = 0xC6; // C
}
if (bit_nhay&(mode>0))
{
switch (mode)
{
case 1: ledData[0] = ledData[1] = 0xFF; break;
case 2: ledData[2] = ledData[3] = 0xFF; break;
case 3: ledData[4] = ledData[5] = 0xFF; break;
case 4: ledData[0] = ledData[1] = 0xFF; break;
case 5: ledData[2] = ledData[3] = 0xFF; break;
case 6: ledData[6] = ledData[7] = 0xFF; break;
}
}
}
// quet phim
void scanKey(void)
{
if (MODE == 0) // Nhan phim MODE
{
while(!MODE)quetLed(); // Cho nha phim
mode++;
chedo = 1;
if(mode>3)chedo = 2;
if (mode > 6)
{
mode = 0;
chedo = 1;
rtcWriteTime(hour,min,sec);
rtcWriteDate(date,mon,year);
}
}
if (mode != 0)
{
if(UP == 0) // Nhan phim UP
{
dem=0;
while(!UP)quetLed();// Cho nha phim
switch (mode)
{
case 1: hour++; if (hour > 23)hour = 0; break;
case 2: min++; if (min > 59)min = 0; break;
case 3: sec++; if (sec > 59)sec = 0; break;
case 4: date++; if (date > 31)date = 1; break;
case 5: mon++; if (mon > 12)mon = 1; break;
case 6: year++; if (year > 99)year = 0; break;
}
}
if(DOWN == 0) // Nhan phim Down
{
dem=0;
while(!DOWN)quetLed(); // Cho nha phim
switch (mode)
{
case 1: if (hour == 0)hour = 23; else hour --; break;
case 2: if (min == 0)min = 59; else min --; break;
case 3: if (sec == 0)sec = 59; else sec--; break;
case 4: if (date == 1)date = 31; else date --; break;
case 5: if (mon == 1)mon = 12; else mon --; break;
case 6: if (year == 0)year = 99; else year--; break;
}
}
}
if (SET == 0)
{ // Nhan phim set
while(!SET)quetLed(); // Cho nha phim
mode = 0; // Thoat che do dat thoi gian
rtcWriteTime(hour,min,sec);
rtcWriteDate(date,mon,year);
}
}
Hôm nay mình muốn trao đổi về vấn đề an toàn khi nạp firmware từ xa (FOTA). Khi triển khai hàng trăm thiết bị ở xa, rủi ro lớn nhất là đang cập nhật firmware thì mất điện hoặc rớt mạng giữa chừng khiến...
Comment