[C5] Bài tập cuối khoá

nguyenhongduc_nc

Thành Viên PIF
Bạn có cách nào để so sánh Function code được không...VD: VDK gửi 001 -->data[0]=0;data[1]=0;data[2]=1;..Làm sao so sánh được
if(FunctionCode==00000001)
{
Xuat_LCD(data); // code of LCD function is 00000001
}
if(FunctionCode==00000011)
{
Xuat_Led7Seg(data); // code of Led7Seg function is 00000001
}
Nếu vậy thì không lẽ mình phải kiểm tra từng byte như vậy thì rất là dài dòng .Mình đã thử dùng hàm strcmp(so sánh chuỗi) có trong <string.h> nhưng không được
Cám ơn bạn rất nhiều
 

Tan Sy Nguyen

Cố Vấn CLB
Staff member
Hình như các bạn làm hơi dài, mình nghĩ Function code chỉ 1 byte là đủ rồi. Vd: '1' là I2C, '2' là LCD, ... đến '9' là dư dả function rồi, thiếu thì thêm 'a', 'b', ...
 

nguyenhongduc_nc

Thành Viên PIF
anh Sỹ ơi,khi e gửi dữ liệu lên PC thì làm sao PC bik đó là dữ liệu gì để mà hiện thị cho đúng chổ
VD:e có txtLCD để hiện thị LCD ,txtADC để hiện ADC ,txtI2C để hiện I2C...
Trong đoạn code này chỉ hiện dc 1 nơi cố định thôi
private void COM_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string s;
s = COM.ReadLine();
Display(s);
}
private delegate void DIDisplay(string s);
private void Display (string s)
{
if (TxtReceive.InvokeRequired)
{
DIDisplay sd = new DIDisplay(Display);
TxtReceive.Invoke(sd, new object[] {s});
}
else
{
TxtReceive.Items.Add(s);
TxtFReceive.Text = s;
}
}
Em đã thử 1 vài cách nhưng nó không hoạt động dc
Ah ,cho e hỏi thêm 1 câu là khi mình dùng timer để định thì dùng ReadExisting để đọc dữ liệu + dùng Com_dataReceive dùng ReadLine đọc dữ liệu song song được không anh.Em có thử nhưng hình như cái sự kiện Com_dataReceive được ưu tiên hơn
 

Tan Sy Nguyen

Cố Vấn CLB
Staff member
private delegate void DIDisplay(string s);
private void Display (string s)
{
if (TxtFReceive.InvokeRequired)
{
DIDisplay sd = new DIDisplay(Display);
TxtFReceive.Invoke(sd, new object[] {s});
}
else
{
//TxtReceive.Items.Add(s);
TxtFReceive.Text = s;
}
}
Hình như ntn mới đúng, có phải đối tượng của bạn là textbox TxtFReceive ko
 

nguyenhongduc_nc

Thành Viên PIF
uh..ý e là e có txtLCD để hiện thị LCD ,txtADC để hiện ADC ,txtI2C để hiện I2C...
Làm sao để VDK bik dc đó là dữ liệu của LCD để hiện lên txt LCD ,dữ liệu của ADC thì hiện lên lên txtADC......
Đoạn code trên e chỉ minh hoạ là hiện được lên txtReceive mà thôi.....còn mún hiện lên các txtLCD,txtADC..... theo đúng dữ liệu truyền từ VDK thì em vẫn chưa tìm được cách...
 

nguyenhongduc_nc

Thành Viên PIF
Tình hình là em ngồi nguyên ngày để tìm cách truyền dữ liệu từ PC qua UART để hiện thị LCD mà vẫn chưa được.Mọi người xem giúp e đoạn code này sao nó không chạy được
while(1)
{
uart_gets(data); //data[5] nhận dữ liệu từ UART
switch(data[0])
{
case 's'://Function code hien thi LCD
{
lcd_clear();
for (i=1;i<=4;i++)
{
lcd_putc(data);// hien thi 4 byte dữ liệu lên LCD
}
uart_puts(&data[1]);// trả ngược về 4 byte dữ liệu lên PC

break;
}
}
Em dùng biến s làm Function code rùi 4 byte là dữ liệu từ PC (đã tính ký tự NULL)
Không biết nó có bị sai chổ nào không nữa ..hic
 

light

Thành Viên PIF
anh chị cho e hỏi khi uart nhận xong 1 kí tự RCIF=1, khi nhận tiếp 1 kí tự nữa nó có tự động = 0 hay không
 

nguyenhongduc_nc

Thành Viên PIF
Cờ RCIF sẽ tự động xóa bằng phần cứng đó bạn,mình chỉ có thể đọc được nó thôi ...^^
 

nguyentambi

Thành Viên PIF
chưa có lịch học nữa mà tình hình em đang ở quê. Chắc phải nhờ bạn nộp bài quá
 

Tan Sy Nguyen

Cố Vấn CLB
Staff member
Thông báo:
Vì cuối tuần này (cả ngày thứ 7 và sáng CN) sẽ thi cao học nên các bạn tạm nghỉ, tuần sau chúng ta sẽ báo cáo nhé.
Có thêm 1 tuần nữa để chuẩn bị, mong các bạn hoàn thành thật tốt bài tập, mở rộng để quản lý được tất cả các module đã học trên PIC thông qua máy tính. Những sáng tạo sẽ được điểm bonus. Cố lên !!!
Chúc các bạn may mắn.
 

2death

Cố Vấn CLB
Staff member
Hôm ấy các bô lão sẽ tới tham dự để xem bạn nào nhận được phần thưởng siêu khủng từ anh Sỹ nhá :D
 

cenakhoa

em thích màu hồng
anh cho em hỏi làm thế nào để xuất file window form trong viúal studio thành 1 chương trình chạy độc lập bên ngoài ạ ??
 

nguyenhongduc_nc

Thành Viên PIF
Anh ơi,cho em hỏi,tại sao em khi em gửi dữ liệu lên Cho PC thì PC ko xuất ra dữ liệu luôn mà phải reset VDK thì dữ liệu mới xuất ra .. sau đó em gửi tiếp dữ liệu khác và cũng phải reset VDK nó mới xuất ra được..Có phải cách truyền dữ liệu em sai chổ nào không ..?
 

40903219

Trứng gà
Code:
void interrupt isr()
{
	if(RCIE &&RCIF)
	{
		UartReceive[a] = uart_getc();
		a++;
		RCIE = 0 ;
	}
}
void main()
{
	UartInterrupt_init();
	lcd_init();
	uart_init();
	a=1;
	while(1)
	{	
		lcd_putc(UartReceive[a-1]);
		RCIE = 1;
		__delay_ms(100);
		if(a==6)
		{
			a=1;
		}
	}
}
mình làm hoài mà nó chỉ nhận được 3 kí tự thôi.
vd :transfer 12345 (truyền bằng terminal và C# cho cùng kết quả, baudrate : 19200)
receive 123 (hiển thi tren LCD)
mình đã debug thì thấy biến a=4 (ngắt 3 lần) và đọc trong datasheet thấy đoạn này : "The FIFO buffering allows
reception of two complete characters and the start of a
third character before software must start servicing the
EUSART receiver." mà giờ vẫn chưa khắc phục được!. mong các bạn giúp đỡ!
 

nguyentambi

Thành Viên PIF
Code:
void interrupt isr()
{
	if(RCIE &&RCIF)
	{
		UartReceive[a] = uart_getc();
		a++;
		RCIE = 0 ;
	}
}
void main()
{
	UartInterrupt_init();
	lcd_init();
	uart_init();
	a=1;
	while(1)
	{	
		lcd_putc(UartReceive[a-1]);
		RCIE = 1;
		__delay_ms(100);
		if(a==6)
		{
			a=1;
		}
	}
}
mình làm hoài mà nó chỉ nhận được 3 kí tự thôi.
vd :transfer 12345 (truyền bằng terminal và C# cho cùng kết quả, baudrate : 19200)
receive 123 (hiển thi tren LCD)
mình đã debug thì thấy biến a=4 (ngắt 3 lần) và đọc trong datasheet thấy đoạn này : "The FIFO buffering allows
reception of two complete characters and the start of a
third character before software must start servicing the
EUSART receiver." mà giờ vẫn chưa khắc phục được!. mong các bạn giúp đỡ!

Bạn bỏ thử dòng RCIE=0 xem. Mình dùng ngắt UART không bao giờ dùng tới dòng này vì khi mình gán RCREG cho 1 biến nào đó thì tự động RCIF sẽ về 0; còn bạn tắt RCIE thì nó sẽ không nhận thêm kí tự nào nữa. Mình nghĩ vậy :))
 

nguyentambi

Thành Viên PIF
Huhu T7 tuần này đi nộp làm ơn có ai tốt bụng cho mượ ké mấy cái mạch với. Tình hình là mấy cái mạch đem làm đề tài TTKT hết rùi, còn con Ds1307 thì lúc chạy lúc ko :((
 

light

Thành Viên PIF
huhu, cũng code đó, mạch đó, tối cắm zô chạy ro ro, sáng tỉnh dậy cắm zô không chạy, huhu
 

Thanh Huy

Thành Viên PIF
có ji t7 em cho anh mượn
Huhu T7 tuần này đi nộp làm ơn có ai tốt bụng cho mượ ké mấy cái mạch với. Tình hình là mấy cái mạch đem làm đề tài TTKT hết rùi, còn con Ds1307 thì lúc chạy lúc ko :((
 
Top